Как я могу заставить PHP отображать заголовки, полученные от браузера?

Все ли они хранятся в $_SERVER? Даже заказные?


person tehryan    schedule 10.09.2009    source источник


Ответы (7)


Попробуй это

print_r($_СЕРВЕР)

Он будет перечислять все в массиве

person Steven Mercatante    schedule 10.09.2009
comment
Если вы хотите что-то более конкретное, используйте: <?php print_r($_SERVER[URL]) ?> - person LeRoy; 02.06.2015
comment
Не печатает заголовки SSL_*, а getallheaders() печатает. - person Benoit Duffez; 31.01.2020

вы можете использовать getallheaders(), чтобы получить массив всех отправленных заголовков HTTP.

$headers =  getallheaders();
foreach($headers as $key=>$val){
  echo $key . ': ' . $val . '<br>';
}
person aphoe    schedule 07.09.2014

Каждое поле заголовка HTTP-запроса находится в $_SERVER (кроме Cookie), а ключ начинается с HTTP_. Если вы используете Apache, вы также можете попробовать apache_request_headers.

person Gumbo    schedule 10.09.2009
comment
А как насчет информации о файлах cookie? Можем ли мы использовать $_COOKIE[] для их получения? - person shasi kanth; 06.02.2014
comment
@dskanth Да, $_COOKIE будет содержать уже проанализированные файлы cookie, отправленные клиентом. Но $_SERVER['HTTP_COOKIE'] не будет. - person Gumbo; 06.02.2014
comment
@Gumbo, чем это отличается от getallheaders? Есть ли заголовки, которые убраны для последнего? - person Pacerier; 01.02.2018

Вы можете просто использовать apache_request_headers() или его псевдоним getallheaders().

Использование: echo json_encode(getallheaders());

Если вышеуказанная функция не существует (старый PHP или nginx), вы можете использовать это как запасной вариант:

<?php 
if (!function_exists('getallheaders')){ 
    function getallheaders() { 
       $headers = ''; 
       foreach ($_SERVER as $name => $value) { 
            if (substr($name, 0, 5) == 'HTTP_') { 
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
            } 
       } 
       return $headers; 
    } 
}
?>
person Panos Kal.    schedule 18.01.2016

Посмотрите на переменную $_SERVER, чтобы узнать, что она содержит. Связанная страница руководства содержит много полезной информации, но также просто нажмите на нее var_dump, чтобы увидеть, что на самом деле находится в ней. Многие записи будут или не будут заполнены, в зависимости от того, что решит сделать клиент, и странных особенностей PHP. Глядя на тот, что на моем локальном сервере, есть также записи $_SERVER["ALL_HTTP"], которые просто перечисляют их все в виде строки, но, по-видимому, это не стандартно, так как это не указано на странице руководства.

person davidtbernal    schedule 10.09.2009

вы можете использовать apache_request_header(); может быть, помочь вам.

$headers = apache_request_headers();        
foreach ($headers as $header => $value) {
 echo "<pre>";
 echo "$header : $value";
 echo "</pre>";
}
person Eka Hoggy    schedule 30.08.2016

Что происходит, так это то, что имена заголовков http переписываются:

  1. С префиксом HTTP_
  2. Заменен на '_'
  3. Верхний корпус

По крайней мере, это то, что я наблюдал для своих пользовательских заголовков и apache 2.4. Это не канонический и не исчерпывающий список того, что вы должны проверить, но он может привести вас в правильном направлении, так как мне ничего из вышеперечисленного не помогло.

person Sebas    schedule 01.06.2020