Можно ли получить заголовки http текущего запроса с помощью PHP? Я не использую Apache в качестве веб-сервера, а использую nginx.
Я пытался использовать getallheaders()
, но получаю Call to undefined function getallheaders()
.
Можно ли получить заголовки http текущего запроса с помощью PHP? Я не использую Apache в качестве веб-сервера, а использую nginx.
Я пытался использовать getallheaders()
, но получаю Call to undefined function getallheaders()
.
Взято из документации, кто-то написал комментарий...
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = array ();
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
ucwords
и strtolower
в этой функции? Это необходимо ?
- person Michal S.; 20.11.2016
Улучшена @Layke его функция, что сделало ее использование более безопасным:
if (!function_exists('getallheaders')) {
function getallheaders()
{
if (!is_array($_SERVER)) {
return array();
}
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
(хотел бы я просто добавить это как комментарий к его ответу, но все еще опираюсь на эту репутацию - один из моих первых ответов)
Вы можете обновить свой сервер до PHP 5.4, что даст вам доступ к getallheaders() через fastcgi или просто разобрать то, что вам нужно. $_SERVER с циклом foreach
и небольшим регулярным выражением.
nginx
работает на FastCGI? Поэтому getallheaders()
не работает в PHP 5.3?
- person Ben Harold; 31.05.2013
getallheaders()
не работает при использовании PHP 5.3 или старше с nginx? Означает ли это, что и getallheaders()
, и apache_request_headers()
работают при использовании PHP 5.4 и nginx?
- person Ben Harold; 01.06.2013
Комбинация getallheaders() + apache_request_headers() для nginx
function get_nginx_headers($function_name='getallheaders'){
$all_headers=array();
if(function_exists($function_name)){
$all_headers=$function_name();
}
else{
foreach($_SERVER as $name => $value){
if(substr($name,0,5)=='HTTP_'){
$name=substr($name,5);
$name=str_replace('_',' ',$name);
$name=strtolower($name);
$name=ucwords($name);
$name=str_replace(' ', '-', $name);
$all_headers[$name] = $value;
}
elseif($function_name=='apache_request_headers'){
$all_headers[$name] = $value;
}
}
}
return $all_headers;
}
Эта проблема была окончательно решена в PHP 7.3.0, см. примечания к выпуску.
Исправлена ошибка #62596 (getallheaders() отсутствует в PHP-FPM).
Это должно работать:
<?php
print_r(
array_intersect_key(
$_SERVER,
array_flip(
preg_grep(
'/^HTTP_/',
array_keys($_SERVER),
0
)
)
)
);