Глобальные массивы в PHP

Глобальные массивы в PHP

Индекс материала
Глобальные массивы в PHP
Глобальные массивы в PHP стр.2
Все страницы

php

Гениальность PHP – в той простоте, с которой он позволяет интегрировать в программу переменные форм. Это делает веб-программирование приятным и простым – от вывода формы и ее обработки до вывода результатов. В HTTP нет встроенного механизма, который позволял бы сохранять информацию при переходе от одной страницы к другой. Причина этого в том, что HTTP не сохраняет свое состояние между запросами.

Обработка информации, получаемой от пользователя, одна из важнейших задач. Вы никогда не должны доверять данным, доставленным пользователем, поэтому обязательной является проверка достоверности всех полей, даже скрытых элементов формы.

Существует много способов проверки корректности данных – от проверки информации на соответствие определенному критерию, до преобразования сущностей HTML в escape - последовательности, что позволяет безопасно отображать информацию, вводимую пользователем.

После этого все эти данные становятся доступными посредством обращения к следующим массивам:$_GET, $_POST, $_FILES, $_COOKIE, $_SERVER и $_ENV. Они содержат, соответственно, все переменные, установленные запросами GET, запросами POST, загруженными файлами, cookies, веб сервером и окружением. Кроме того, есть массив $_REQUEST, содержащий пришедшие от пользователя данные – GET, POST и cookies.

Если два массива содержат ключ с одним и тем же именем, то при размещении элементов внутри массива $_REQUEST PHP поступает в соответствии с параметром конфигурации variables_order. По умолчанию variables_order равна "EGPCS" (Environment, GET, POST, Cookie, Server). Поэтому PHP сначала добавляет в массив $_REQUEST переменные окружения, а затем добавляет переменные GET, POST, cookie и переменные веб сервера в указанном порядке.

Например, если по умолчанию C идет после P, то cookie с именем username переписывает переменную POST с именем username. Если у вас нет доступа к файлу конфигурации PHP, то проверить установку переменной можно с помощью функции ini_get():


  print ini_get('variables_order');

Вам может потребоваться сделать это, поскольку ваш интернет провайдер запрещает вам просматривать параметры конфигурации, или
потому, что ваш сценарий, вероятно, запущен еще на каком нибудь сервере.

Эти параметры можно также просмотреть посредством функции phpinfo(). Однако если нельзя полагаться на значение опции variables_order, то надо обратиться непосредственно к массивам $_GET и $_POST, вместо того чтобы использовать массив $_REQUEST.

Массивы, содержащие внешние переменные, такие как $_REQUEST, являются суперглобальными.

Это означает, что их не требуется объявлять как global внутри функции или класса. Это также означает, что, вероятно, вы не должны присваивать что нибудь этим переменным, иначе вы перепишете хранимую в них информацию.
До версии PHP 4.1 эти суперглобальные переменные не существовали.

Вместо них были обычные массивы с именами:

  • $HTTP_COOKIE_VARS,
  • $HTTP_ENV_VARS,
  • $HTTP_GET_VARS,
  • $HTTP_POST_VARS,
  • $HTTP_POST_FILES
  • $HTTP_SER VER_VARS

Эти массивы все еще доступны в целях совместимости, но с новыми массивами работать проще. Эти более старые массивы заполняются, только если параметр конфигурации track_vars установлен в on, но начиная с версии PHP 4.0.3 эта возможность включена всегда.


Если параметр конфигурации register_globals установлен в on, все эти переменные также доступны как переменные глобального пространства имен. Поэтому $_GET['password'] – это одновременно и просто $password.

Удобству при этом сопутствуют значительные проблемы безопасности, поскольку злоумышленные пользователи могут легко установить переменные извне и переписать внутренние переменные, которым вы, вроде бы, должны доверять. Начиная с версии PHP 4.2 параметр register_globals по умолчанию устанавливается в off.

Опираясь на полученные знания, напишем сценарий, объединяющий все сказанное выше. Форма просит пользователя ввести его имя, а затем выводит сообщение с приветствием. HTMLдокумент для этой формы может выглядеть следующим образом:

Обработка информации, полученной из формы


  <form action="/hello.php" method="post">
    Как Ваше имя?
    <input type="text" name="first_name">
    <input type="submit" value="Поздоровайтесь">
  </form>

Параметр name текстового элемента input внутри формы имеет значение first_name. Кроме того, в форме используется метод post. Это значит, что после отправки формы элемент $_POST['first_name'] будет содержать любую строку, которую напечатает пользователь. (Она может быть также пустой, если, конечно, ничего не было напечатано.)

Но давайте для простоты предположим, что в переменной находится допустимое значение. («Допустимое» может означать, в зависимости от обстоятельств, «непустое», «не заданное в попытке взломать систему» и т. д.) Это позволит нам пропустить важный этап проверки ошибок, но зато мы сможем представить этот простой пример.

Итак, ниже показан простой сценарий hello.php для обработки формы:


  echo 'Hello ' . $_POST['first_name'] . '!';  

Если пользователя зовут Вася, то PHP печатает: Hello Вася!

В будущем мы рассмотрим, как обеспечить безопасность веб сервера, а так же рассмотрим обработку файлов, загружаемых пользователем. При обработке страницы PHP всегда устанавливает наличие переменных, пришедших с запросами GET или POST, загруженных файлов, допустимых cookies, а также переменных веб сервера и окружения.

Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 130 гостей онлайн