14 ответов:
если: вам нужен только один заголовок, вместо все заголовки, самый быстрый метод-это:
<?php // Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_') $headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];
ИНАЧЕ ЕСЛИ: вы запускаете PHP как модуль Apache или, начиная с PHP 5.4, используя FastCGI (простой метод):<?php $headers = apache_request_headers(); foreach ($headers as $header => $value) { echo "$header: $value <br />\n"; }
другое: в любом другом случае, вы можете использовать (реализация userland):<?php function getRequestHeaders() { $headers = array(); foreach($_SERVER as $key => $value) { if (substr($key, 0, 5) <> 'HTTP_') { continue; } $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5))))); $headers[$header] = $value; } return $headers; } $headers = getRequestHeaders(); foreach ($headers as $header => $value) { echo "$header: $value <br />\n"; }
посмотреть Также:
getallheaders() - (PHP >= 5.4)cross platform editionпсевдонимapache_request_headers()apache_response_headers () - извлечение всех заголовков ответа HTTP.
headers_list () - получить список заголовков для отправки.
$_SERVER['HTTP_X_REQUESTED_WITH']RFC3875, 4.1.18:
мета-переменные с именами, начинающимися с
HTTP_содержат значения, считанные из полей заголовка запроса клиента, если используется протокол HTTP. Имя поля заголовка HTTP преобразуется в верхний регистр, имеет все вхождения-заменить_иHTTP_добавлено, чтобы дать имя мета-переменной.
вы должны найти все заголовки HTTP в
$_SERVERглобальная переменная с префиксомHTTP_в верхнем регистре и с тире ( - ) вместо подчеркивания (_).к примеру
X-Requested-Withможно найти в:$_SERVER['HTTP_X_REQUESTED_WITH']было бы удобно создать ассоциативный массив из
$_SERVERпеременной. Это может быть сделано в нескольких стилях, но вот функция, которая выводит camelcased ключи:$headers = array(); foreach ($_SERVER as $key => $value) { if (strpos($key, 'HTTP_') === 0) { $headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value; } }теперь просто использовать
$headers['XRequestedWith']для получения желаемого заголовок.PHP руководство по
$_SERVER: http://php.net/manual/en/reserved.variables.server.php
начиная с PHP 5.4.0 вы можете использовать
getallheadersфункция, которая возвращает все запрошенные заголовки в виде ассоциативного массива:var_dump(getallheaders()); // array(8) { // ["Accept"]=> // string(63) "text/html[...]" // ["Accept-Charset"]=> // string(31) "ISSO-8859-1[...]" // ["Accept-Encoding"]=> // string(17) "gzip,deflate,sdch" // ["Accept-Language"]=> // string(14) "en-US,en;q=0.8" // ["Cache-Control"]=> // string(9) "max-age=0" // ["Connection"]=> // string(10) "keep-alive" // ["Host"]=> // string(9) "localhost" // ["User-Agent"]=> // string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) [...]" // }ранее эта функция работала только тогда, когда PHP работал как модуль Apache/NSAPI.
strtolowerотсутствует в нескольких из предложенных решений, RFC2616 (HTTP/1.1) определяет поля заголовка как объекты без учета регистра. Все это, а не только стоимостью часть.Так что предложения, как только разбор соответствующий http_ записи неверны.
лучше бы было так:
if (!function_exists('getallheaders')) { foreach ($_SERVER as $name => $value) { /* RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. */ if (strtolower(substr($name, 0, 5)) == 'http_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } $this->request_headers = $headers; } else { $this->request_headers = getallheaders(); }обратите внимание на тонкие различия с предыдущими предложениями. Функция здесь также работает на php-fpm (+nginx).
передайте ключ заголовка эта функция вернет свое значение вы можете получить значение заголовка с помощью for loop
function get_header( $headerKey ) { $test = getallheaders(); if ( array_key_exists($headerKey, $test) ) { $headerValue = $test[ $headerKey ]; } return $headerValue; }
чтобы сделать вещи простыми, вот как вы можете получить только один вы хотите:
просто:
$headerValue = $_SERVER['HTTP_X_REQUESTED_WITH'];или когда вам нужно получить по одному за раз:
<?php /** * @param $pHeaderKey * @return mixed */ function get_header( $pHeaderKey ) { // Expanded for clarity. $headerKey = str_replace('-', '_', $pHeaderKey); $headerKey = strtoupper($headerKey); $headerValue = NULL; // Uncomment the if when you do not want to throw an undefined index error. // I leave it out because I like my app to tell me when it can't find something I expect. //if ( array_key_exists($headerKey, $_SERVER) ) { $headerValue = $_SERVER[ $headerKey ]; //} return $headerValue; } // X-Requested-With mainly used to identify Ajax requests. Most JavaScript frameworks // send this header with value of XMLHttpRequest, so this will not always be present. $header_x_requested_with = get_header( 'X-Requested-With' );другие заголовки также находятся в супер глобальном массиве $_SERVER, вы можете прочитать о том, как добраться до них здесь:http://php.net/manual/en/reserved.variables.server.php
я использовал CodeIgniter и использовал код ниже, чтобы получить его. Может быть полезно для кого-то в будущем.
$this->input->get_request_header('X-Requested-With');
вот как я это делаю. Вам нужно получить все заголовки, если $header_name не передается:
<?php function getHeaders($header_name=null) { $keys=array_keys($_SERVER); if(is_null($header_name)) { $headers=preg_grep("/^HTTP_(.*)/si", $keys); } else { $header_name_safe=str_replace("-", "_", strtoupper(preg_quote($header_name))); $headers=preg_grep("/^HTTP_${header_name_safe}$/si", $keys); } foreach($headers as $header) { if(is_null($header_name)){ $headervals[substr($header, 5)]=$_SERVER[$header]; } else { return $_SERVER[$header]; } } return $headervals; } print_r(getHeaders()); echo "\n\n".getHeaders("Accept-Language"); ?>это выглядит намного проще для меня, чем большинство примеров, приведенных в другие ответы. Это также возвращает метод (GET/POST / etc.) и URI запрашивается при получении всех заголовков, которые могут быть полезны, если вы пытаетесь использовать его в журнале.
вот вывод:
Array ( [HOST] => 127.0.0.1 [USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0 [ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [ACCEPT_LANGUAGE] => en-US,en;q=0.5 [ACCEPT_ENCODING] => gzip, deflate [COOKIE] => PHPSESSID=MySessionCookieHere [CONNECTION] => keep-alive ) en-US,en;q=0.5
вот простой способ сделать это.
// echo get_header('X-Requested-With'); function get_header($field) { $headers = headers_list(); foreach ($headers as $header) { list($key, $value) = preg_split('/:\s*/', $header); if ($key == $field) return $value; } }
этот небольшой фрагмент PHP может быть полезен для вас:
<?php foreach($_SERVER as $key => $value){ echo '$_SERVER["'.$key.'"] = '.$value."<br />"; } ?>
function getCustomHeaders() { $headers = array(); foreach($_SERVER as $key => $value) { if(preg_match("/^HTTP_X_/", $key)) $headers[$key] = $value; } return $headers; }Я использую эту функцию, чтобы получить пользовательские заголовки, если заголовок начинается с "HTTP_X_" мы нажимаем в массив :)
Если для извлечения требуется только один ключ, например
"Host"адрес требуется, то мы можем использоватьapache_request_headers()['Host']Так что мы можем избежать петель и поставить его в ряд с Эхо-выходами
эта работа, если у вас есть сервер Apache
PHP код:
$headers = apache_request_headers(); foreach ($headers as $header => $value) { echo "$header: $value <br />\n"; }результат:
Accept: */* Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 Host: www.example.com Connection: Keep-Alive
Comments