【发布时间】:2012-08-29 09:36:00
【问题描述】:
这更像是一个警告而不是一个问题,但有人可能会提供更好的解决方案。
我正在从我的 Android 应用程序发送自定义请求标头。
当请求到达 PHP 服务器时,我检查此标头及其值是否存在。
为此,我使用 apache_request_headers() 获取标头数组,然后使用 array_key_exists() 检查标头。
但是,array_key_exists('custom-header', $Hdr) 将返回 false !
所以我用 print_r 转储了数组,你瞧,数组键确实存在于数组中。
这是输出:
Array
(
[Accept-Encoding] => gzip
[Connection] => Keep-Alive
[Content-Type] => application/x-www-form-urlencoded
[Content-Length] => 103
[Host] => www.somedomain.com
[custom-header] => my-custom-header-value
)
我是如何解决这个问题的?
像这样克隆数组:
// recuperate the request headers
$Hdr = apache_request_headers();
// clone the array as it will not correctly search with array_key_exists
$Keys = array_keys($Hdr);
$Values = array_values($Hdr);
$Headers = array();
for($i = 0; $i < count($Keys); $i++)
{
$Headers[$Keys[$i]] = $Values[$i];
}
现在,当我使用 array_key_exists('custom-header', $Headers) 查询新数组时,它返回 true !
这是一个已知问题吗?
有没有更好的解决方案?
注意:我已经更改了真实值的名称以保护我的代码,此处仅作为示例给出 - 请不要发布对这些值的更正: -)
编辑:这发生在我的共享服务器上,在 Apache 版本 2.2.22 上运行 PHP 版本 5.3.10
【问题讨论】:
-
isset($Hdr["Custom-header"])会返回 true 吗? -
你能真正提供你有问题的代码吗?对于某些数组它不起作用是没有意义的,但是当你将这些东西复制到一个相同的数组时,它就起作用了。至少,我希望看到一个显示行为的具体测试用例。
-
@Passerby - 不,这也不起作用。
-
@eis - 具体代码就是我所描述的。我无法从我的 Android 应用程序中提供代码。我完全同意这没有意义。再次注意:当外部应用程序向 PHP 服务器发出请求时会发生这种情况。因此,需要对现实生活中的示例进行编码以进行测试。如果您也是一名 Android 开发人员,我相信您能够将这些放在一起。
-
具体代码或者它没有发生。如果没有可复制的可验证示例,这根本不可信。很难接受您关于 PHP 的 stock 数据结构“不起作用”的解释。
标签: php android http-headers