10

我有一个非常令人沮丧的问题,我无法检索任何标题。这是我的代码:

$headers = getallheaders();
echo($headers["SystemTime"]); //Doesnt work
$keys = array_keys($headers);
echo($headers[$keys[4]]); //Doesnt work

这两行都产生错误“未定义的索引:SystemTime”。

我一生都无法弄清楚为什么我无法获得价值。如果我去print_r($headers);,我会得到这个

Array
(
    [Content-Type] => application/x-www-form-urlencoded
    [Content-Length] => 0
    [Host] => localhost
    [Referer] => 
    [SystemTime] => 2012-06-26+09%3a20%3a27
)

$headers 的 var_dump

array(5) {
  ["Content-Type"]=>
  string(33) "application/x-www-form-urlencoded"
  ["Content-Length"]=>
  string(1) "0"
  ["Host"]=>
  string(9) "localhost"
  ["Referer"]=>
  string(0) ""
  ["SystemTime"]=>
  string(23) "2012-06-26+10%3a10%3a08"
}

$keys 的 var_dump

array(5) {
  [0]=>
  string(12) "Content-Type"
  [1]=>
  string(14) "Content-Length"
  [2]=>
  string(4) "Host"
  [3]=>
  string(7) "Referer"
  [4]=>
  string(10) "SystemTime"
}

foreach ($headers as $name => $value) { 
   echo "$name: $value. From Array: {$headers[$name]}\n"; 
} 

回来:

Connection: Keep-Alive. From Array: Keep-Alive
Content-Type: application/x-www-form-urlencoded. From Array: application/x-www-form-urlencoded
Content-Length: 0. From Array: 0
Host: localhost. From Array: localhost
Referer: . From Array: 

Notice:  Undefined index:  SystemTime in /clientdata/apache-www/a/d/[XXXXXX].com/www/admin/request/GetPCLicence.php on line 22
SystemTime: 2012-06-26+10%3a10%3a08. From Array: 

我被卡住了,我真的无法弄清楚出了什么问题。它应该工作。

PS。我知道 SystemTime 标头是非标准的。我从我的 http_request 中提供了它。

4

2 回答 2

3

在你们的帮助下,我得到了它。我有一种感觉,因为它在反序列化之后起作用,可能编码不同,这就是为什么我们可以看到它,但不能触摸它?

我下面的代码获取所有标题并转换编码并将其放入一个新数组中:)

这是我的“翻译”代码。

    $headersRaw = getallheaders();
    $headers = array();
    foreach($headersRaw as $key => $value)
    {
        $headers[mb_convert_encoding($key, "UTF-8")] = $value;
    }
于 2012-06-26T01:00:34.993 回答
0

此时您最好的选择可能是使用$_SERVER超全局获取您需要的任何标头的值(例如$_SERVER['HTTP_SYSTEMTIME'].

我无法通过调用getallheaders()和发送自定义请求(就像您的SystemTime标题设置为2012-06-26+10%3a10%3a08. 它按预期工作,我看到该值打印了两次(一次使用过getallheaders(),一次使用过$_SERVER。这很可能是一个奇怪的 PHP 错误,因为我没有看到关于该函数的任何特殊说明apache_request_headers,或者它的代码在PHP 的 5.2.17 分支。

希望这暂时有所帮助。无论如何,使用$_SERVER['HTTP_*']可能更可靠,因为getallheaders并非在所有配置中都可用。

于 2012-06-26T00:50:43.873 回答