Область действия переменных
При использвании переменных в программе на PHP необходимо принимать во внимание область их действия (видимости). Это - тот контекст (блок кода), где их можно использовать.
По умолчанию, переменная видна и может быть использована в том контексте, в котром её определили.
К этому же контексту отосятся блоки кода, вставленные из других файлов при помощи операторов include и requre.
Константы (и пользовательские и стандартные PHP) видны во всех контекстах.
В примере: те переменные, которые определены в области видимости "контекст1", доступны и в коде, нходящемся в файле file1.php и в фукциях f1(), f2().
Те переменные, которые пределены в областях видимости "контекст2" и "конткст3" доступны тлько в этих контекстах.
Суперглобальные переменные
Некоторые предопределённые переменные в PHP являются "суперглобальными", что означает, что они доступны в любом месте скрипта.
Суперглобальными переменными являются:
- $GLOBALS — Ссылки на все переменные глобальной области видимости. Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.
- $_SERVER — Информация о сервере и среде исполнения. Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером.
- $_GET — GET-переменные HTTP. Ассоциативный массив параметров, переданных скрипту через URL.
- $_POST — POST-переменные HTTP. Ассоциативный массив данных, переданных скрипту через HTTP метод POST.
- $_FILES — Переменные файлов, загруженных по HTTP. Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.
- $_REQUEST — Переменные HTTP-запроса. Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
- $_SESSION -- Переменные сессии. Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.
- $_ENV — Переменные окружения. Ассоциативный массив (array) значений, переданных скрипту через переменные окружения. Эти значения импортируются в глобальное пространство имен PHP из системных переменных окружения, в котором запущен парсер PHP.
- $_COOKIE — HTTP Куки. Ассоциативный массив (array) значений, переданных скрипту через HTTP Куки.
$_SERVER
Описание
Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете ожидать их реализации и в конкретном веб-сервере.
Замечание: До версии PHP 5.4.0, $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно).
Индексы
Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_SERVER. Заметьте, что немногие элементы, если вобще такие найдутся, будут доступны (или действительно будут иметь значение), если PHP запущен в командной строке.
-
- 'PHP_SELF'
-
- Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.
-
- 'argv'
-
- Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
-
- 'argc'
-
- Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
-
- 'GATEWAY_INTERFACE'
-
- Содержит используемую сервером версию спецификации CGI; к примеру'CGI/1.1'.
-
- 'SERVER_ADDR'
-
- IP адрес сервера, на котором выполняется текущий скрипт.
-
- 'SERVER_NAME'
-
- Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
Замечание: Под Apache 2, вы должны выставить UseCanonicalName = On и ServerName. Иначе, это значение отразит имя хоста клиента и может быть подделано. Не безопасно полагаться на это значение в контексте требующем безопасности.
-
- 'SERVER_SOFTWARE'
-
- Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
-
- 'SERVER_PROTOCOL'
-
- Имя и версия информационного протокола, через который была запрошена страница; к примеру 'HTTP/1.0';
-
- 'REQUEST_METHOD'
-
- Какой метод был использован для запроса страницы; к примеру 'GET', 'HEAD', 'POST', 'PUT'.
Замечание:
PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
-
- 'REQUEST_TIME'
-
- Временная метка начала запроса. Доступна, начиная с PHP 5.1.0.
-
- 'REQUEST_TIME_FLOAT'
-
- Временная метка начала запроса с точностью до микросекунд. Доступна, начиная с PHP 5.4.0.
-
- 'QUERY_STRING'
-
- Строка запросов, если есть, с помощью которой была получена страница.
-
- 'DOCUMENT_ROOT'
-
- Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
-
- 'HTTP_ACCEPT'
-
- Содержимое заголовка Accept: из текущего запроса, если он есть.
-
- 'HTTP_ACCEPT_CHARSET'
-
- Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: 'iso-8859-1,*,utf-8'.
-
- 'HTTP_ACCEPT_ENCODING'
-
- Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: 'gzip'.
-
- 'HTTP_ACCEPT_LANGUAGE'
-
- Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: 'en'.
-
- 'HTTP_CONNECTION'
-
- Содержимое заголовка Connection: из текущего запроса, если он есть. Например: 'Keep-Alive'.
-
- 'HTTP_HOST'
-
- Содержимое заголовка Host: из текущего запроса, если он есть.
-
- 'HTTP_REFERER'
-
- Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.
-
- 'HTTP_USER_AGENT'
-
- Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
-
- 'HTTPS'
-
- Принимает непустое значение, если запрос был произведен через протокол HTTPS.
Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
-
- 'REMOTE_ADDR'
-
- IP-адрес, с которого пользователь просматривает текущую страницу.
-
- 'REMOTE_HOST'
-
- Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR.
Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().
-
- 'REMOTE_PORT'
-
- Порт на удаленной машине, который используется для связи с веб-сервером.
-
- 'REMOTE_USER'
-
- Аутентифицированный пользователь.
-
- 'REDIRECT_REMOTE_USER'
-
- Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
-
- 'SCRIPT_FILENAME'
-
-
Абсолютный путь к скрипту, который в данный момент исполняется.
Замечание:
Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER['SCRIPT_FILENAME'] будет содержать относительный путь, указанный пользователем.
-
- 'SERVER_ADMIN'
-
- Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
-
- 'SERVER_PORT'
-
- Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет '80'; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On иUseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта. Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности.
-
- 'SERVER_SIGNATURE'
-
- Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
-
- 'PATH_TRANSLATED'
-
- Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping.
Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATEDдолжна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директивуAcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.
-
- 'SCRIPT_NAME'
-
- Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
-
- 'REQUEST_URI'
-
- URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
-
- 'PHP_AUTH_DIGEST'
-
- При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок 'Authorization', который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
-
- 'PHP_AUTH_USER'
-
- Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
-
- 'PHP_AUTH_PW'
-
- Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
-
- 'AUTH_TYPE'
-
- Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
-
- 'PATH_INFO'
-
- Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER['PATH_INFO'] будет содержать /some/stuff.
-
- 'ORIG_PATH_INFO'
-
- Исходное значение переменной 'PATH_INFO' до начала обработки PHP.
-