Напомним, какие массивы создает РНР, когда обрабатывает данные, пришедшие из формы:
● $_GET — содержит GET-параметры, пришедшие скрипту через переменную окружения QUERY_STRING. Например, $_GET [' login'];
● $_post — данные формы, пришедшие методом post;
● $_cookie — все cookies, которые прислал браузер;
● $_ REQUEST — объединение трех перечисленных выше массивов.
Именно переменную $_ REQUEST рекомендуется использовать в скриптах, потому что таким образом мы не «привязываемся» жестко к типу принимаемых данных (get или post);
● $_server — содержит переменные окружения, переданные сервером (отсюда и название).
Может показаться, что это много. Чтобы не запутаться в переменных, рассмотрим полезный прием, помогающий при отладке сценариев: можно вывести все переменные в браузер.
Листинг dump.php. Вывод всех переменных в браузер
<! - - Выводит все глобальные переменные - ->
< pre >
<?print_r($ GLOBALS )?>
</ pre >
Задача данного сценария — распечатать в браузер все глобальные переменные программы (включая описанные выше массивы) в читабельном представлении. Глобальные переменные доступны через используемый массив $ GLOBALS. Встроенная функция print_r() делает все остальное.
Страница, генерируемая данным сценарием, весьма интересна. Рекомендуем поэкспериментировать с ней, передавая программе различные GET-данные (включая многомерные массивы) и подставляя ее в атрибут action различных HTML-форм.
3. КАКОЙ РЕЖИМ ВЫБРАТЬ : register_globals=off & on ?
В рассмотренных примерах каждый раз при обращении к переменным, полученным из полей формы, писали:
$_ REQUEST [' … ']
Это делать необходимо из-за того, что все данные из полей формы PHP помещает в глобальный массив $_ REQUEST .
В ранних версиях РНР (вплоть до РНР 4.1) существовал способ, позволяющий работать с полями формы значительно проще. По умолчанию РНР не помещал данные в $_ REQUEST, а создавал обыкновенные глобальные переменные для каждого из полей формы. Например, можно было написать такой сценарий:
<!- - Вывод параметров командной строки. - ->
<? php
echo ” Hello , $ name !”;
?>
Запустив его с нужным параметром, например: http://localhost/hello.php?name=Виктор Сергеевич, можно увидеть корректную страницу приветствия: РНР создал глобальную переменную $name, значение которой и напечатано:
Такой режим работы называется register_globals и поддерживается в РНР по сей день. При этом в файле php.ini этот параметр находится во включенном состоянии:
Однако, начиная с PHP 4.2.0, register_globals по умолчанию выключен в файле php.ini:
Разработчики РНР поступили так по соображениям безопасности: часто скрипты, написанные в расчете на включенный register_g l oba l s, обнаруживали проблемы с защитой.
Внимание
Начиная с PHP 4.2.0, значение директивы register_globals по умолчанию установлено в off (отключено, раньше было on - включено). Положение register_globals в off делает предопределенные переменные доступными в глобальной области видимости.
Например, чтобы получить:
● $DOCUMENT_ROOT, вам необходимо будет использовать $_SERVER['DOCUMENT_ROOT'] вместо $DOCUMENT_ROOT;
● $_GET['id'] из URL http://www.example.com/test.php?id=3 вместо $id;
● $_ENV['HOME'] вместо $HOME.
Использование доступных зарезервированных предопределенных переменных PHP, таких как суперглобальные массивы, является предпочтительным.
Предупреждение!
В PHP 4.2.0 и позднее, набор по умолчанию предопределённых переменных, доступных в глобальной области видимости, изменён. Отдельные переменные ввода и сервера по умолчанию больше не размещаются непосредственно в глобальной области видимости; они размещаются в суперглобальных массивах.
Вы можете форсировать старое поведение, установив register_globals в 'On' в вашем файле php.ini.
Дата: 2019-04-23, просмотров: 217.