Все ли они хранятся в $_SERVER
? Даже заказные?
Как я могу заставить PHP отображать заголовки, полученные от браузера?
Ответы (7)
Попробуй это
print_r
($_СЕРВЕР)
Он будет перечислять все в массиве
<?php print_r($_SERVER[URL]) ?>
- person LeRoy; 02.06.2015
SSL_*
, а getallheaders()
печатает.
- person Benoit Duffez; 31.01.2020
вы можете использовать getallheaders()
, чтобы получить массив всех отправленных заголовков HTTP.
$headers = getallheaders();
foreach($headers as $key=>$val){
echo $key . ': ' . $val . '<br>';
}
Каждое поле заголовка HTTP-запроса находится в $_SERVER
(кроме Cookie
), а ключ начинается с HTTP_
. Если вы используете Apache, вы также можете попробовать apache_request_headers
.
$_COOKIE
будет содержать уже проанализированные файлы cookie, отправленные клиентом. Но $_SERVER['HTTP_COOKIE']
не будет.
- person Gumbo; 06.02.2014
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;
}
}
?>
Посмотрите на переменную $_SERVER, чтобы узнать, что она содержит. Связанная страница руководства содержит много полезной информации, но также просто нажмите на нее var_dump
, чтобы увидеть, что на самом деле находится в ней. Многие записи будут или не будут заполнены, в зависимости от того, что решит сделать клиент, и странных особенностей PHP. Глядя на тот, что на моем локальном сервере, есть также записи $_SERVER["ALL_HTTP"], которые просто перечисляют их все в виде строки, но, по-видимому, это не стандартно, так как это не указано на странице руководства.
вы можете использовать apache_request_header(); может быть, помочь вам.
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "<pre>";
echo "$header : $value";
echo "</pre>";
}
Что происходит, так это то, что имена заголовков http переписываются:
- С префиксом HTTP_
- Заменен на '_'
- Верхний корпус
По крайней мере, это то, что я наблюдал для своих пользовательских заголовков и apache 2.4. Это не канонический и не исчерпывающий список того, что вы должны проверить, но он может привести вас в правильном направлении, так как мне ничего из вышеперечисленного не помогло.