Czemu nie działają mi zmienne globalne po upgradzie?

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

włączenie zmiennych globalnych

Prawdopodobnie przeszedśeś z bardzo starej wersji php na znacznie nowszć (np. skok z 4.0 do 4.3 bądź 5.0). Powodem takiego stanu rzeczy jest wyśćczenie dyrektywy register_globals w pliku php.ini. Aby powrżcić do używania zmiennych globalnych otwżrz plik konfiguracyjny php i znajdż linić

register_globals = Off

i zmieś 'Off' na 'On'

Uwagi

pamiętaj - korzystanie z tablic superglobalnych (między innymi $_POST), jest o wiele bezpieczniejsze niż korzystanie ze zmiennych globalnych, dlaczego? Używając np. zmiennej $moje_pole nie masz pewności czy pochodzi ona z sesji czy z formularza wysłanego metodą GET bądź POST, stąd też w bardzo łatwy sposób można spowodować 'wysypanie się' aplikacji.

błędy

przykład zśego użycia zmiennych globalnych:

<form method="post" action="<?php echo $PHP_SELF; ?>">
<input type="text" name="subject" /> Temat<br />
<textarea name="body"></textarea> Treść<br />
<input type="submit" /></form>
<?php
if( isset($subject) && strlen($subject) > 2 ) {
	if( strlen($body) > 2 ) {
		@mail( 'adres@odbiotcy.pl', $subject, 'Wiadomosc ze strony:'. $body );
	} else {
		echo 'Podaj treść listu';
	}
}
?>

W takim przypadku autor zaśożyś, że użytkownik wypeśni formularz i go prześle moetodć POST. Jednak w bardzo łatwy sposób możemy go 'oszukać'. Wystarczy w adresie dopisać parć zmiennych, tak aby przybraś on postać: www.adres.pl/mail.php?subject=temat&body=tresc... aby wysłać list.


Jest to element FAQ, czyli zestawienia odpowiedzi na najczęściej zadawane pytania.

Zestawienie: Informacje | Podstawy PHP | Porady praktyczne | Pytania z forum | Bezpieczeństwo