PHP область действия переменных
При использвании переменных в программе на 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.
РНР: настольная книга программиста
РНР: настольная книга программиста
ОглавлениеПредисловиеО чем эта книга Принятые выделения Введение Часть I. Основные характеристики РНР Глава 1 Введение в РНР 1.2. Преимущества и недостатки РНР Глава 2. Установка РНР 2.1. Установка на системы Unix 2.2. Установка на системы Linux 2.3. Установка на системы Windows 9x/Me/NT/2000 2. 4. Установка расширений функциональных возможностей Windows2.5. Тестирование РНР Глава 3. Быстрая установка Apache-сервера 3.1. Потребность в виртуальном сервере 3.2. Установка Apache 3.3. Виртуальные хосты Apache Глава 4. Текстовый редактор, используемый для редактирования РНР-скриптов 4.2. Новые возможности редактора EditPlus 2.10 4.3. Меню File 4.4. Меню Edit 4.5. Меню View 4.6. Меню Search 4.7. Меню Document 4.8. Меню Project 4.9. Меню Tools 4.10. Меню Window 4.11. Меню Help 4.12. Панель инструментов Заключение Глава 5. Конфигурация 5.2. Директивы конфигурации почты 5.3. Директивы конфигурации Safe Mode 5.4. Директивы конфигурации отладчика 5.5. Директивы загрузки расширений (Extension Loading) 5.6. Директивы конфигурации MySQL 5.7. Директивы конфигурации mSQL 5.8. Директивы конфигурации Postgres 5.9. Директивы конфигурации Sybase 5.10. Директивы конфигурации унифицированных ODBC 5. 11. Директивы конфигурации модуля ApacheЗаключение Глава 6. Проблемы безопасности 6.2. Установка модуля Apache 6.3. Безопасность файловой системы 6.4. Создание virtualHost с разумными ограничениями безопасности РНР Заключение Часть II. Программирование на РНР 7.1. Способы ввода PHP-кода в документ 7.2. Разделение инструкций 7.3. Использование комментариев Заключение Глава 8. Типы данных в PHP 8.2. Строки 8.3. Преобразование строк 8.4. Массивы 8.5. Указатель array pointer 8.6. Изменение типа 8.7. Определение типов переменных 8.8. Приведение типа Заключение Глава 9. Переменные в PHP 9.2. Операция получения адреса 9.3. Область видимости (scope) в PHP 9.4. Переменные переменных 9.5. Передача параметров скрипту при запуске из командной строки 9.6. Формы HTML (Get/Post) 9.7. Передача значенийпеременных, соответствующих кнопкам формы 9.8. HTTP-Cookies 9.9. Системные переменные 9. 10. Точки в именах входящих переменных9.11. Как проверить, был ли отмечен checkbox в форме 9.12. Определение типов переменных Заключение Глава 10. Предопределенные константы и их использование Заключение Глава 11. Выражения в PHP 11.2. Скалярные и нескалярные выражения в PHP 11.3. Регулярные выражения PHP/FI2 и выражения присваивания 11.4. Выражения сравнения в PHP 11.5. Совмещенные выражения 11.6. Выражения условных операторов 11.7. Логические значения выражений 11.8. Счетчик посещений Заключение Глава 12. Арифметические операции в PHP 12.2. Одноместные операции в PHP 12.3. Двухместные операции в PHP 12.4. Арифметические операции в PHP 12.5. Операции назначения в PHP 12.6. Поразрядные операции в PHP 12.7. Операции сравнения в PHP 12.8. Операции контроля ошибок в PHP 12.9. Логические операции в PHP 12.10. Строковые операции в PHP Заключение Глава 13. Структуры управления данными в PHP 13. 7. Конструкция if в PHP13.8. Конструкция if … else в PHP 13.9. Конструкция elseif в PHP 13.10. Альтернативный синтаксис для управляющих структур 13.11. Конструкция switch в PHP 13.12. Операторы цикла в PHP 13.14. Конструкция do … while в PHP 13.15. Конструкция for в PHP 13.16. Конструкция foreach в PHP 13.17. Операторы перехода в PHP 13.19. Оператор continue в PHP 13.20. Оператор возврата return в PHP 13.21. Включение исходного кода текста, содержащегося в файле 13.22. Оператор require() 13.23. Оператор include() в PHP 13.24. Оператор require_once() 13.25. Оператор include_once() Заключение Глава 14. Базовые концепции функций в PHP Глава 15. Классы и объекты в PHP 15.5. Синтаксис классов в PHP 15.6. Данные класса в PHP 15.7. Методы класса в PHP 15.8. Задания значений изменяющимся переменным в классах в PHP 15.9. Расширение классов в PHP 15.10. Работа с переменными класса в PHP 15.11. Манипуляция с именами в PHP15.12. Манипуляция уровнем сложности при работе с классами в PHP 15.13. Указатель на самого себя $this 15.14. Замечания по объектной терминологии в PHP 15.15. Ссылки внутри конструктора 15.16. Демонстрационная программа Заключение Часть III. Особенности реализации языка Глава 16. Обработка ошибок в PHP 16.2. Подавление ошибок при обращении к функциям в PHP Заключение Глава 17. Идентификация в РНР 17.2. Основные концепции при программировании авторизации 17.3. Авторизация посетителей сайта Заключение Глава 18. Загрузка файлов по HTTP 18.2. Скрипты для обработки принимаемых данных 18.3. Возможные трудности Заключение Глава 19. Эффективная работа в РНР при сетевом соединении с Web-сервером Часть IV. PHP-функции 20.2. Вычисления матриц 20.3. Функции возвращения 20.4. Применение вызовов в PHP 20.5. Функции объединения 20.6. Сортировка массивов в PHP 20.7. Вытеснение элементов из массива в PHP 20. 8. Получение элементов согласно внутреннему указателю массива20.9. Функции среза элементов массива в PHP Заключение Глава 21. Функции обнаружения орфографических ошибок в PHP 21.1. Функции ispell, aspell и pspell 21.2. Краткий обзор концепций функций aspell 21.3. Особенности функций pspell 21.4. Создание конфигурации 21.5. Вызов файлов контроля синтаксиса 21.6. Списки слов проверки орфографии и принципы работы с ними в PHP 21.7. Функции непосредственной проверки орфографии в PHP 21.8. Функция игнорирования слов определенной длины Заключение Глава 22. Математические функции и функции произвольной точности (ВС) в PHP 22.2. Функции произвольной точности (ВС-функции) Заключение Глава 23. Функции даты/времени и работы с календарем в PHP 23.2. Функции даты и времени в PHP 23.3. Практическое применение функций даты и времени в PHP Заключение Глава 24. Функции работы с классами и объектами в PHP 24.2. Вызов методов пользователя классов 24. 3. Проверка классов в PHP24.4. Возврат параметров класса в PHP 24.5. Возврат массива параметров объекта в PHP 24.6. Определение существующих классов в PHP 24.7. Программирование при помощи функций работы с классами в PHP Заключение Глава 25. Функции для манипуляций со строками в PHP 25.1. Функции удаления пробелов 25.2. Работа с ASCII-кодами в PHP 25.3. Шифрование строк 25.4. Функции вывода строк на печать 25.5. Деление и соединение строк 25.6. Работа с кодом HTML в PHP 25.7. Доступ с операциями замены строк или подстрок, сравнение строк в PHP 25.8. Операции поиска символов 25.9. Перевод строк в верхний и нижний регистры 25.10. PHP: Перевод строки в другую кодовую таблицу Заключение Глава 26. Функции работы с файлами в PHP 26.2. Копирование файлов в PHP 26.3. Основные операции над файлами в PHP 26.4. PHP: Чтение и проверка файлов 26.5. PHP: Определение атрибутов файлов 26.6. PHP: Создание и удаление директории 26. 7. PHP: Доступ к строке файлового пути26.8. PHP: Получение информации о файле 26.9. PHP: Создание уникального имени 26.10. PHP: Установка времени модификации файла 26.11. PHP: Разные функции работы с файлами 26.12. PHP: Пример программирования Заключение Глава 27. Работа с электронной почтой в РНР 27.1. PHP: Функция отправления почты 27.2. PHP: Отправление почты с использованием дополнительных заголовков 27.3. PHP: Отправление почты нескольким адресатам 27.4. PHP: Принципы программирования Заключение Глава 28. PHP: Операции потокового ввода-вывода 28.2. PHP: Включение буфера, пересылка и очистка 28.3. PHP: Возврат значений буфера вывода 28.4. PHP: Функция работы с кодированными страницами Заключение Глава 29. PHP: Функции регулярных выражений и правила их формирования Заключение Глава 30. PHP: Функции семафоров и разделяемой памяти Заключение Глава 31. Сессии в РНР 31.2. Работа с сессиями в PHP 31. 3. PHP: Практическое применение сессий31.4. PHP: Безопасность Заключение Глава 32. Принципы работы с базой данных MySQL 32.1. Установка MySQL 32.2. Функции получения доступа 32.3. Функции открытия и закрытия соединений 32.4. Функции возврата сообщений 32.5. Функция создания БД 32.6. Переход на указанную строку 32.7. Вызов строки результатов БД 32.8. Списки потоков записи на сервере 32.9. Практическая реализация Заключение Глава 33. Практическое применение РНР 33.2. Оптимизатор кода HTML Приложение А. PHP: Список опций конфигураций Приложение С. PHP: Сообщения об ошибках |
Переменный объем
Область видимости переменной — это контекст, в котором она определена. По большей части все переменные PHP имеют только одну область видимости. Эта единая область охватывает также включенные и обязательные файлы. Для пример:
Здесь переменная $a будет доступна во включенном b.
inc.
сценарий. Однако в пользовательских функциях локальная функция
вводится размах. Любая переменная, используемая внутри функции,
по умолчанию ограничено областью действия локальной функции. Для
пример:
Этот скрипт не будет выводить никакого вывода, потому что оператор эха ссылается на локальную версию переменной $a, и она не была присвоено значение в пределах этой области. Вы можете заметить, что это немного отличается от языка C в том, что глобальные переменные в C автоматически доступны для функций, если специально переопределяется локальным определением. Это может вызвать некоторые проблемы в что люди могут непреднамеренно изменить глобальную переменную. В PHP глобальные переменные должны быть объявлены глобальными внутри функции, если они будут использоваться в этой функции. Пример:
Приведенный выше скрипт выведет «3». Объявив $a и
$b global внутри функции, все ссылки на любую переменную
будет относиться к глобальной версии.
Количество не ограничено
глобальных переменных, которыми можно манипулировать
функция.
Второй способ доступа к переменным из глобальной области видимости — использование специальный PHP-массив $GLOBALS. Предыдущий пример может переписать как:
Массив $GLOBALS — это ассоциативный массив с именем глобальная переменная, являющаяся ключом и содержимым этой переменной являющееся значением элемента массива.
Еще одной важной особенностью области видимости переменных является статические переменные. Статическая переменная существует только в локальной области действия функции, но не теряет своего значения когда выполнение программы выходит из этой области. Рассмотрим следующее пример:
Эта функция совершенно бесполезна, так как каждый раз, когда она вызывается
устанавливает $a в 0 и печатает «0». $a++, который увеличивает
переменная не имеет смысла, так как как только функция выходит
переменная $a исчезает.

Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.
(Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно).
— Мн.: Новое знание, 2003. — 480 с.
4. Установка расширений функциональных возможностей Windows
11. Директивы конфигурации модуля Apache
10. Точки в именах входящих переменных
7. Конструкция if в PHP
Манипуляция с именами в PHP
8. Получение элементов согласно внутреннему указателю массива
3. Проверка классов в PHP
7. PHP: Доступ к строке файлового пути
3. PHP: Практическое применение сессий