Получение всех заголовков HTTP-запроса

mfl
На сайте с 16.10.2006
Offline
134
mfl
712

Пожалуйста подскажите, каким образом можно получить все заголовки HTTP-запроса на php, установленном как CGI?

В общем, как добиться результата работы функции getallheaders()?

PB
На сайте с 05.04.2006
Offline
51
#1

<?

phpinfo(16);

?>

Потом разгребаете то, что он вернул. Это будет список всех переменных доступных в массиве $_ENV.

Это работает независимо от того, собран ли php модулем, или подключается через СГИ.

Сайт находится в разработке. (http://www.e-anatomy.ru)
mfl
На сайте с 16.10.2006
Offline
134
mfl
#2

Спасибо, я знаю про $_ENV, дело в том, что разгребать не получится, т.к. надо узнать все заголовки которые послал браузер, это во первых. А во вторых, все ключи массива возвращаются в верхнем регистре.

PB
На сайте с 05.04.2006
Offline
51
#3

mfl, а, сорьки, всё попутал.

phpinfo(32);

А какая разница, в каком регистре? Значения то там в нормальном виде. Попробуйте.

N
На сайте с 15.08.2007
Offline
5
#4

Алгоритм довольно простой: достаточно обойти все ключи массива параметров, которые начинаются с HTTP_. Значения этих ключей — те самые значения заголовков. С их получением проблем быть не должно. Что касается самих заголовков, то всё ненамного сложнее: достаточно отрезать от них частицу "HTTP_", заменить в них прочерк на дефис, и получится массив с заголовками (регистр не имеет значения).

Если же хочется, чтобы всё было красиво, то можно через strtolower() привести ключ к нижнему регистру, разбить полученную строку по прочерку функцией explode() на массив, элементы которого обработать ucfirst() посредством array_map()... И всё :).

Это будет выглядеть примерно так:

$headers = array();


foreach ($_SERVER as $key => $value) {
if ('HTTP_' === substr($key, 0, 5)) {
$field = substr($key, 5);
$field = strtolower($field);
$field = implode('-', array_map('ucfirst', explode('_', $field)));
$headers[$field] = $value;
}
}

print_r($headers);

Единственное но: если PHP установлен как модуль Apache, то итерировать придётся $_SERVER. Если же PHP работает как CGI, то всю информацию нужно получать из окружения ($_ENV).

PB
На сайте с 05.04.2006
Offline
51
#5

mfl, А, кстати, nopox меня поддержал! Ничего я не попутал. : -))) Действуйте!

mfl
На сайте с 16.10.2006
Offline
134
mfl
#6

В общем, спасибо.

По началу испугался, что придется фильтровать значения.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий