Intereting Posts
Возможность PHP обрабатывать несколько TCP-соединений? Как отобразить или просмотреть загруженное изображение после отправки на PHP без сохранения базы данных? Недопустимый номер параметра: параметры не были связаны Как получить дочернее имя класса из родительского класса множественные приложения codeigniter с поддоменами wild card, mod_rewrite переназначение поддоменов в .php file_get_contents jpg corrupt скачать Регулярное выражение, позволяющее только целые числа и запятые в строке Поля MySQL datetime и летнее время – как я могу ссылаться на «дополнительный» час? Как реализовать систему тегов, аналогичную SO в php / mysql? Результаты поиска функции в таблице Сессия по загрузке PHP Узнайте, есть ли функция с выходом php Отправить запрос на отправку AJAX, используя только PHP PHP Word, отправка сгенерированного файла в браузер в качестве вывода без сохранения его на диске Как проверить, введен ли session_start?

Как прочитать заголовок любого запроса в PHP

Как читать заголовок в PHP?

Например, пользовательский заголовок: X-Requested-With .

ЕСЛИ : вам нужен только один заголовок, а не все заголовки, самый быстрый способ:

 <?php // Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_') $headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX']; 

ELSE IF : вы запускаете PHP как модуль Apache или, как и PHP 5.4, используя FastCGI (простой метод):

apache_request_headers ()

 <?php $headers = apache_request_headers(); foreach ($headers as $header => $value) { echo "$header: $value <br />\n"; } 

ELSE: В любом другом случае вы можете использовать (пользовательскую реализацию):

 <?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) межплатформенная версия Псевдоним 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_ и дефисами (-) заменяться HTTP_ подчеркивания (_).

Например, ваш X-Requested-With можно найти в:

 $_SERVER['HTTP_X_REQUESTED_WITH'] 

Может быть удобно создать ассоциативный массив из переменной $_SERVER . Это можно сделать в нескольких стилях, но вот функция, которая выводит клавиши с верёвкой:

 $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

 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

Вот как я это делаю. Вам нужно получить все заголовки, если $ 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; } } 
 function getCustomHeaders() { $headers = array(); foreach($_SERVER as $key => $value) { if(preg_match("/^HTTP_X_/", $key)) $headers[$key] = $value; } return $headers; } 

Я использую эту функцию для получения пользовательских заголовков, если заголовок начинается с «HTTP_X_», мы вставляем массив 🙂

Я использовал CodeIgniter и использовал код ниже, чтобы получить его. Может быть полезным для кого-то в будущем.

 $this->input->get_request_header('X-Requested-With'); 

Этот небольшой фрагмент PHP может быть вам полезен:

 <?php foreach($_SERVER as $key => $value){ echo '$_SERVER["'.$key.'"] = '.$value."<br />"; } ?>