IF : вам нужен только один заголовок, вместо всех заголовков, самый быстрый метод:
<?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 (простой метод):
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) кроссплатформенное издание Alias of apache_request_headers()
apache_response_headers () - извлекает все заголовки HTTP-ответа.
headers_list () - Получить список заголовков для отправки.
RFC3875 , 4.1.18:
источник
$_SERVER
переменную? Документация по PHP на php.net/manual/en/reserved.variables.server.php уклончива в том, что мы можем быть уверены, что там будет.cache-control
заголовок, но я его нигде не вижу$_SERVER
. Я вижу несколько заголовков с префиксомHTTP_
, включая «HTTP_ACCEPT» и «HTTP_UPGRADE_INSECURE_REQUESTS» и «HTTP_USER_AGENT» (среди нескольких других). Но ничего для «управления кэшем» тоже ничего для «прагмы». Это независимо от регистра илиHTTP_
префикса. Я что-то упускаю?_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Вы должны найти все заголовки HTTP в
$_SERVER
глобальной переменной с префиксом вHTTP_
верхнем регистре и с тире (-), замененным подчеркиванием (_).Например, вы
X-Requested-With
можете найти в:Может быть удобно создать ассоциативный массив из
$_SERVER
переменной. Это может быть сделано в нескольких стилях, но вот функция, которая выводит ключи на верблюдах:Теперь просто используйте
$headers['XRequestedWith']
для получения нужного заголовка.Руководство по PHP
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpисточник
parseRequestHeaders()
функции. Если такой ассоциативный массив необходим, то IMO лучше использовать функцию apache, поскольку она возвращает именно полученные заголовки, а не искаженную версию CamelCase. (Также обратите внимание, что начиная с PHP 5.4, он больше не только для Apache.)apache_request_headers()
или,getallheaders()
кажется, не использует заглавные буквы в заголовках при тестировании. Они возвращаются именно так, как я прохожу со стороны клиента. Тогда почему вы используете заглавные буквы в такой функции замены?Начиная с PHP 5.4.0 вы можете использовать
getallheaders
функцию, которая возвращает все заголовки запроса в виде ассоциативного массива:Ранее эта функция работала только тогда, когда PHP работал как модуль Apache / NSAPI.
источник
strtolower
В некоторых из предложенных решений отсутствует, RFC2616 (HTTP / 1.1) определяет поля заголовка как регистронезависимые объекты. Все дело, а не только часть стоимости .Так что предложения, такие как только разбор записей HTTP_ , неверны.
Лучше было бы так:
Обратите внимание на тонкие различия с предыдущими предложениями. Функция здесь также работает на php-fpm (+ nginx).
источник
Date
заголовок - и что «Значения параметра [текст в Content-Type после точки с запятой] могут или не могут быть чувствительными к регистру». Таким образом, учитывая, что есть как минимум два заголовка с учетом регистра символов, кажется, что вы ошибаетесь.HTTP header fields, which include general-header (section 4.5), request-header (section 5.3), response-header (section 6.2), and entity-header (section 7.1) fields, follow the same generic format as that given in Section 3.1 of RFC 822 [9]. Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.
Так что, думаю, ты не прав.Передайте имя заголовка этой функции, чтобы получить ее значение без использования
for
цикла. Возвращает ноль, если заголовок не найден.Примечание: это работает только с сервером Apache, см .: http://php.net/manual/en/function.getallheaders.php
Примечание: эта функция будет обрабатывать и загружать все заголовки в память, и она менее производительна, чем
for
цикл.источник
Чтобы упростить задачу, вот как вы можете получить только тот, который вы хотите:
Просто:
или когда вам нужно получить по одному:
Другие заголовки также находятся в супер глобальном массиве $ _SERVER, о том, как их получить, вы можете прочитать здесь: http://php.net/manual/en/reserved.variables.server.php
источник
HTTP_
к$headerKey
Я использовал CodeIgniter и использовал код ниже, чтобы получить его. Может быть полезно для кого-то в будущем.
источник
Вот как я это делаю. Вам нужно получить все заголовки, если не указано $ header_name:
Для меня это выглядит намного проще, чем для большинства примеров, приведенных в других ответах. Он также получает метод (GET / POST / и т. Д.) И URI, запрашиваемый при получении всех заголовков, что может быть полезно, если вы пытаетесь использовать его при ведении журнала.
Вот вывод:
источник
Вот простой способ сделать это.
источник
Этот небольшой фрагмент PHP может быть полезен для вас:
источник
Я использую эту функцию для получения пользовательских заголовков, если заголовок начинается с «HTTP_X_», мы вставляем массив :)
источник
если для получения требуется только один ключ, например,
"Host"
требуется адрес, то мы можем использоватьТак что мы можем избежать петель и поместить их в линию к выводам эха
источник
PHP 7: нулевой оператор объединения
источник
Это работает, если у вас есть сервер Apache
PHP-код:
Результат:
источник