Възможно ли е да получите 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
)
)
)
);