HTML, Excel, Word, SEOPHP курс для чайников ⇒ Глобальные массивы

PHP для "чайников"

Инструменты
Выбираем IDE
Выбираем Web-сервер
Выбираем СУБД
Структура языка PHP
Первый шаг
Синтаксис
Типы данных
Переменные и константы
Операторы
Выражения
Управляющие структуры
Функции
Классы
Исключения
Ошибки
Массивы
Глобальные массивы
Cookies
Сессии
Загрузка файлов
Работа с файлами
Работа с файлами на диске
Работа с данными в файле
Пример управления файлами
Работа с базами данных
Подключение
Анализ результатов
Выполнение запросов
Отключение
Пример: отслеживание пользователей
Работа в сети
Отправка почты
Безопасность
HTTP-аутентификация
Защита логином и паролем
Автоматизация
Регулярные выражения в PHP
Интеграция
PHP и JavaScript

Популярный клуб Вулкан Россия приглашает поучаствовать в новом турнире

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


Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

В PHP версии 4 и выше введено понятие "суперглобальных" массивов. Эти массивы содержат всю информацию о состоянии сервера и среды выполнения скрипта. Массивы доступны в любом месте скрипта без дополнительных объявлений, т.е. не надо использовать ключевое слово global.


Всего массивов девять. Имена всех массивов записываются заглавными буквами, а начинается имя всегда с "$_" (кроме массива $GLOBALS).

$GLOBALS Массив содержит ссылки на все переменные, объявленные в данном скрипте. Это ассоциативный массив, в котором имена переменных являются ключами.
$_SERVER Массив содержит все данные о настройках среды выполнения скрипта и параметры сервера.
$_GET Список переменных, переданных скрипту методом GET, т.е. через параметры URL-запроса.
$_POST Список переменных, переданных скрипту методом POST.
$_COOKIE Массив содержит все cookies, которые сервер установил на стороне пользователя.
$_FILES Содержит список файлов, загруженных на сервер из формы. Более детально мы рассмотрим этот массив в уроке, посвящённом загрузке файлов на сервер.
$_ENV Содержит переменные окружения, установленные для всех скриптов на сервере.
$_REQUEST Этот массив объединяет массивы $GET, $POST и $COOKIE. очень часто бывает удобен при обработке пользовательских запросов, но применять его для защищённой обработки данных не стоит.
$_SESSION Массив содержит все переменные сессии текущего пользователя.

Просмотреть содержимое всех масивов можно в результате вызова функции phpinfo().

Рассмотрим примеры использования глобальных массивов.

$_SERVER

С помощью этого массива можно узнать практически всё о сервере, на котором исполняется скрипт. Например:

<?php

    echo 'параметры сервера:' . "<br />\n";

    echo "Операционная система: " . 
		$_SERVER["OS"] . "<br />\n";
    echo "Web-сервер: " . 
		$_SERVER["SERVER_SOFTWARE"] . "<br />\n";
    echo "Имя сервера: " . 
		$_SERVER["SERVER_NAME"] . "<br />\n";
    echo "Адрес сервера: " . 
		$_SERVER["SERVER_ADDR"] . "<br />\n";
    echo "Порт сервера: " . 
		$_SERVER["SERVER_PORT"] . "<br />\n";
    echo "Адрес клиента: " . 
		$_SERVER["REMOTE_ADDR"] . "<br />\n";
    echo "Путь к документам на сервере: " . 
		$_SERVER["DOCUMENT_ROOT"] . "<br />\n";
    echo "Полный путь к текущему скрипту: " . 
		$_SERVER["SCRIPT_FILENAME"] . "<br />\n";
    echo "Имя текущего скрипта: " . 
		$_SERVER["PHP_SELF"] . "<br />\n";

?>

Пользоваться этим массивом нужно аккуратно, т.к. некоторые сервера имеют достаточно специфичные настройки или значения параметров. Иногда это приводит к неприятным ошибкам, которые к тому же очень сложно диагностировать и исправить. Например, параметры $_SERVER["REQUEST_URI"] и $_SERVER["SCRIPT_NAME"] могут быть не установлены (хотя один из них как правило присутствует).

$_GET и $_POST

В эти массивы помещаются данные, передаваемые скрипту извне (так называемый, пользовательский ввод). В принципе, пользователь может влиять только на эти два массива плюс массив файлов и cookie. И именно поэтому все элементы этих массивов должны тщательно проверяться на допустимые значения.

Например, если пользователь ввёл в строку адреса браузера адрес "http://localhost/index.php?name=Dmitry&fam=Medvedev&jt=president&country=Russia", то массив $_GET надо будет обрабатывать так:

<?php
   /*
    Предполагаем, что массив $_GET должен
    содержать следующие элемены

    $_GET['name'] = "Dmitry";
    $_GET['fam'] = "Medvedev";
    $_GET['jt'] = "president";
    $_GET['country'] = "Russia";
   */

   // Теперь проверим наличие данных,
   // а для недостающих - возьмём пустую строку

   $name = (isset($_GET['name']))?
		$_GET['name']:' не указано ';
   $fam = (isset($_GET['fam']))?
		$_GET['fam']:' не указано ';
   $jt = (isset($_GET['jt']))?
		$_GET['jt']:' не указано ';
   $country = (isset($_GET['country']))?
		$_GET['country']:' не указано ';

   echo "Страна: $country <br />\n";
   echo "Фамилия: $fam <br />\n";
   echo "Имя: $name <br />\n";
   echo "Должность: $jt <br />\n";

?>

Этот скрипт будет устойчиво работать при любом GET-запросе, даже если не будет указан ни один параметр. Если используется метод POST, то достаточно заменить $_GET на $_POST. А если вам совершенно не важно, откуда получены данные - воспользуйтесь массивом $_REQUEST (см. ниже).

При работе с пользовательским вводом есть одно правило:


Никогда не доверяйте данным, получаемым извне.

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

$_COOKIES

В массив $_COOKIES автоматически помещаются все cookies, которые получены от браузера. Механизм cookies мы подробно рассмотрим в соответствующем уроке. А пока вам достаточно запомнить, что есть глобальный массив, из которого в любое время можно узнать какие cookies установлены на стороне клиента.

$_REQUEST

Массив $_REQUEST объединяет три массива: $_POST, $_GET, $_COOKIES. В ранних версиях PHP сюда же входил массив $_FILES, но из соображений безопасности и производительности его исключили. Пользоваться массивом $_REQUEST очень удобно в случаях, когда нет разницы, каким методом был сделан запрос. Например, при постраничном выводе данных номер страницы можно передавать через URL ("index.php?page=3") методом GET, а можно через элемент формы методом POST. И в том и в другом случае переменная page попадёт в массив $_REQUEST.

$_SESSION

Предназначение массива $_SESSION - хранение всех переменных сессии текущего пользователя. Мы подробно рассмотрим механизм сессий в соответствующем уроке.

Глобальные массивы очень удобны в работе, но злоупортеблять ими не стоит, особенно массивом $_SESSION. Если переменной нужна только в локальной области видимости - не надо её делать глобальной. Слишком большое количество "лишних" переменных сильно снижает быстродействие и эффективность скрипта.



В начало страницы



В начало страницы