|
Веб-курсы Что это? Оглавление Основы Основы основ Практика Гостевая книга Простой сайт Структура сайта (MVC) Ядро (Light) Ядро Гостевая на SQL Статические страницы Модуль новостей Система регистрации Теория Дебаггинг Регулярные выражения Введение в ООП Паттерны проектирования Репозитарий BB-code Почтовый класс Пагинатор Всякие полезности Download Полезные утилиты Разное Видеокурсы Последние изменения Вопросы и замечания сюда Реклама Диеты для похудения Фреймворк Kohana. Обучение. Мануал на русском. |
register_globalsМы уже разбирались с областями видимости. Напомним. Переменные в программе PHP (скрипте) видны не везде одинаково. То есть не из любой части программы можно обратиться к какой-либо переменной. Таких уровней четыре - глобальная область видимости, локальная, классы и функции. Так вот, те переменные, которые находятся в глобальной области видно везде. А те, которые в функциях к примеру, не видны за их пределами. Что бы в функции стало видно переменную из локальной области (тела программы), нужно объявить переменную глобальной. Запутал? Ничего страшного, сейчас распутаем. Когда прочитаете всю страницу - вернитесь сюда. И это не покажется уже такой бессмыслицей. Вообще все переменные, задействованные в скрипте, это массив $GLOBALS, элементами которого они и являются. Что бы посмотреть на эту кухню изнутри, можно просто распечатать этот массив:
и поизучать. Первыми обычно бывают так называемые "переменные окружения". Это то, что находится в массивах $_ENV и $HTTP_ENV_VARS. Это очень интересные массивы и заслуживают отдельной темы. Не будем сейчас отвлекаться. А вот следом парами идут массивы $_POST ($HTTP_POST_VARS), $_GET ($HTTP_GET_VARS), $_COOKIE (HTTP_COOKIE_VARS) и так далее. Почему они парами. Вот мы и подошли к самому интересному. Дело в том, что это сoвсем не одинаковые массивы, как кажется на первый взгляд. Вернее они содержат одни и те же начальные данные, но обрабатываются по разному. Рассмотрим два, самых используемых - $_POST ($HTTP_POST_VARS) и $_GET ($HTTP_GET_VARS). Для этого сделаем форму:
Если теперь нажать кнопку, то образуется элементы массивов $_POST и $HTTP_POST_VARS (post), а так же $_GET ($HTTP_GET_VARS) (get):
Откуда они взялись? Их передал браузер. get из адресной строки, а post из формы. Обратите внимание, что во всех четырех массивах они называются одинаково - "var". А теперь фокусы. Откройте файл .htaccess и напишите в него это:
Этим самым мы разрешаем PHP обрабатывать массивы $HTTP_POST_VARS и $HTTP_GET_VARS как глобальные, то есть их станет видно непосредственно в теле программы. Можно в этом убедиться:
Скажу Вам больше, если сделать так:
то значение уже будет меняться в зависимости от того, что нажато - кнопка или ссылка. А это путаница. Потому что в массивах у элементов с одинаковым именем значения разные. А теперь их оба видно в теле программы. И кто кого перезапишет - не ясно. Кроме того, что это вносит изрядную путаницу в регистрации переменных, так еще и является приличной дыркой в безопасности. Потому что появляется возможность перезаписи переменных в глобальном массиве. К примеру так:
Если пароль не совпадает, то значит никого не пустим. Но злой шпион пойдет в обход и перезапишет ключ через массив $HTTP_GET_VARS Так что Отчизна в опасности и нужно немедленно отключить возможность такой регистрации переменных:
Oднако как теперь получить значение для переменной $password? Делается это инициализацией, то есть прямым присвоением значений из нужных массивов, а за одно и не помешает инициализировать и ключ:
|