Диагностика создаваемых массивов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Напомним, какие массивы создает РНР, когда обрабатывает данные, пришедшие из формы:

● $_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, просмотров: 182.