Файл “load.php”. Часть 1

load_php

Теперь мы приступаем к изучению ядра WordPress. Начнём с файла “load.php”. В стандартной редакции WordPress именно этот файл ядра загружается первым.

wp_get_server_protocol()

load_1

Функция “wp_get_server_protocol()” – выясняет какой протокол соединения с сервером используется. Для этого данная функция обращается к элементу глобального массива “$_SERVER”. В качестве ключа используется выражение “SERVER_PROTOCOL”. В этом элементе хранится информация об имени и версии протокола. Результат сохраняется в переменной “$protocol”. После того как необходимая информация была получена, выясняем, с помощью функции “in_array()”, соответствует ли результат одному из значений массива. Если да, то функция возвращает значение переменной. Если нет, то переменной “$protocol” присваивается нужное значение, а затем оно возвращается функцией.

wp_unregister_GLOBALS()

load_2

Функция “wp_unregister_GLOBALS()” – эта функция удаляет из суперглобального массива “$GLOBALS” лишние суперглобальные массивы. Прежде чем перейти к разбору этой функции, хочу сказать, что массив “$GLOBALS” способен хранить ссылки на на все переменные, определенные в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива. Это могут быть, например: “$_SERVER”, “$_GET”, “$_POST”, “$_COOKIE”, “$_SESSION”.

Сначала проверяется директива “register_globals”. Если данная директива возвращает “TRUE”, значит разрешено регистрировать переменные EGPCS (Environment, GET, POST, Cookie, Server) в качестве глобальных. Если это так, то обращаемся к глобальной переменной “$_REQUEST”. С помощью функции “isset()” узнаём хранится ли в этой переменной ссылка на суперглобальный массив “$GLOBALS”. Если такая ссылка имеется, тогда прекращаем работу скрипта, используя функцию “die()”.

Если в переменной “$_REQUEST” такая ссылка не храниться, формируется список глобальных переменных, ссылки на которых должны остаться в массиве “$GLOBALS”. Этот список представляется в виде массива “$no_unset”. Затем используется функция “array_merge()” для слияния переменных “$_GET”, “$_POST”, “$_COOKIE”, “$_SERVER”, “$_ENV”, “$_FILES”, “$_SESSION”. Так как эти переменные являются, по своей сути, ассоциативными массивами, то их слияние возможно.

Новый массив “$input”, полученный после слияния, тоже является ассоциативным. В этом массиве в качестве ключей используются имена глобальных переменных “_ENV”, “_FILES”, “_SESSION” и так далее. Теперь, используя конструкцию “foreach”, запускается перебор массива “$input”. Внутри этой конструкции ключи этого массива хранятся в переменной “$k”. При помощи функции “in_array()” ищем совпадения значения переменной “$k” со значениями элементов массива “$no_unset”. Если совпадения нет и в массиве “$GLOBALS” имеется элемент, у которого ключ имеет тоже значение, что и у переменной “$k”, тогда удаляем этот элемент при помощи функции “unset()”.

wp_fix_server_vars()

load_3

Функция “wp_fix_server_vars()” – данная функция анализирует глобальную переменную “$_SERVER” и, при необходимости, исправляет значения некоторых элементов этого массива. Первым делом объявляется глобальная переменная “$PHP_SELF”. В ней хранится имя файла текущего выполняемого скрипта, относительно корня документа. То есть, когда серверу отправляется подобный запрос

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

то в этой переменной будет храниться фрагмент запроса “/test/index.php”.

Далее объявляется массив “$default_server_values”, котором содержит два элемента. После производится слияние “$default_server_values” и “$_SERVER”. В результате получается новый ассоциативный массив, который хранится в глобальной переменной “$_SERVER”. Теперь необходимо обработать этот массив.

В первую очередь необходимо выяснить три вещи. Первая вещь это “URI”, который был предоставлен для доступа к этой странице.

  1. URI – это унифицированный (единообразный) идентификатор ресурса. Он содержит информацию об имени и адресе ресурса в сети. Как правило, делится на URL и URN.
  2. URL: Адрес некоторого ресурса в веб.
  3. URN: Имя некоторого ресурса в веб. .

Например:

URI = http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512
URL = http://www.mysite.ru
URN = /test/index.php

Вторая вещь, которую необходимо уточнить – это “PHP_SAPI”.

PHP_SAPI – это константа, в которой содержится информация о типе интерфейса между веб-сервером и PHP.

Третья – это строка идентификации сервера. Она указывается в заголовках, когда происходит ответ на запрос.

Если строка URI пустая или тип интерфейса отличается от строки “cgi-fcgi”, а строке идентификации сервера можно найти подстроку “Microsoft-IIS/”, тогда возникает необходимость в формировании URI.

Формирование URI происходит следующим образом. Сначала выясняем существует ли в переменной “$_SERVER” элемент с ключом “HTTP_X_ORIGINAL_URL”. Если да, тогда значение этого элемента присваивается элементу переменной “$_SERVER” с ключом “REQUEST_URI”. Если же нет, тогда узнаём существует ли в переменной “$_SERVER” элемент с ключом “HTTP_X_REWRITE_URL”. Если этот элемент существует, тогда значение этого элемента присваивается элементу переменной “$_SERVER” с ключом “REQUEST_URI”. Если и этого элемента нет, тогда переходим к следующему шагу.

Следующий шаг – это поиск элемента с ключом “PATH_INFO”. Если он отсутствует, но имеется элемент с ключом “ORIG_PATH_INFO”, тогда значение этого присваивается элементу переменной “$_SERVER” с ключом “PATH_INFO”. Далее сравниваем элементы переменной “$_SERVER” с ключами “PATH_INFO” и “SCRIPT_NAME”. Если они равны, тогда элементу с ключом “REQUEST_URI” присваиваем значение элемента с ключом “PATH_INFO”. Если сравниваемые элементы не равны, тогда элементу с ключом “REQUEST_URI” присваивается комбинация значений элементов с ключами “PATH_INFO” и “SCRIPT_NAME”.

load_4

Далее в переменной “$_SERVER” ищем элемент с ключом “QUERY_STRING”. Это строка запроса через которую была открыта страница. Например у нас есть запрос:

 "http://www.example.com/php/path_info.php/some/stuff?foo=bar"

Тогда в элементе $_SERVER[‘PATH_INFO’] будет храниться строка со значением “/some/stuff”, а $_SERVER[‘QUERY_STRING’] будет хранить строку со значением “foo=bar”.

Если элемент с ключом “QUERY_STRING” существует, тогда дополняем элемент с ключом “REQUEST_URI” содержимым этого элемента. Для этго используется операция конкатенации.

Итак у нас есть $_SERVER[‘REQUEST_URI’]. Теперь необходимо обработать элемент $_SERVER[‘SCRIPT_FILENAME’], если он существует. Вэтом элементе хранится абсолютный путь к исполняемому скрипту. Обработка этого элемента необходима, так как на некоторых серверах интерпретатор PHP может работать в режиме CGI. В этом случае к абсолютному пути прибавляется окончание “.cgi”. Если такое окончание имеется, то элементу $_SERVER[‘SCRIPT_FILENAME’] присваивается значение элемента $_SERVER[‘PATH_TRANSLATED’]. Если окончание “.cgi” не обнаружено, тогда элемент $_SERVER[‘PATH_INFO’] удаляется.

В конце работы функции “wp_fix_server_vars()” внимание уделяется константе “$PHP_SELF”. О ней речь шла выше.

You may also like...

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Sign up
Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.