Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php apache_请求_头和数组_键_存在_Php_Android_Http Headers - Fatal编程技术网

Php apache_请求_头和数组_键_存在

Php apache_请求_头和数组_键_存在,php,android,http-headers,Php,Android,Http Headers,这与其说是一个问题,不如说是一个警告,但也许有人能提供更好的解决方案 我正在从我的Android应用程序发送一个自定义请求头。 当请求到达PHP服务器时,我检查是否存在此头及其值。 为此,我使用apache\u request\u headers()获取头数组,然后使用数组\u key\u exists()检查头 但是,array\u key\u存在('custom-header',$Hdr)将返回false! 所以我用print_r转储数组,瞧,数组中确实存在数组键。 以下是输出: Array

这与其说是一个问题,不如说是一个警告,但也许有人能提供更好的解决方案

我正在从我的Android应用程序发送一个自定义请求头。 当请求到达PHP服务器时,我检查是否存在此头及其值。 为此,我使用
apache\u request\u headers()
获取头数组,然后使用
数组\u key\u exists()检查头

但是,
array\u key\u存在('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];
}
//恢复请求头
$Hdr=apache_请求_头();
//克隆阵列,因为它将无法使用阵列\u键\u进行正确搜索
$Keys=阵列_键($Hdr);
$Values=数组_值($Hdr);
$Headers=array();
对于($i=0;$i
现在,当我使用
array\u key\u查询新数组时('custom-header',$Headers)
,它返回true

这是一个已知的问题吗

有更好的解决办法吗

注意:为了保护我的代码,我更改了实际值的名称,这里给出了一个示例-请不要对这些值进行更正:-)


编辑:这发生在我的共享服务器上,在Apache 2.2.22版上运行PHP 5.3.10版

,代码示例如下:

$Hdr = apache_request_headers();

$Keys = array_keys($Hdr);
$Values = array_values($Hdr);
$Headers = array();
for($i = 0; $i < count($Keys); $i++)
{
    $Headers[$Keys[$i]] = $Values[$i];
}

var_dump($Hdr === $Headers); # true
或者稍微更改一下代码:

$Hdr = apache_request_headers();
$Headers = array();
foreach($Hdr as $Key => $Value)
{
    $Headers[strtolower($Key)] = $Value;
}

给出你的示例数据

Array
(
    [Accept-Encoding] => gzip
    [Connection] => Keep-Alive
    [Content-Type] => application/x-www-form-urlencoded
    [Content-Length] => 104
    [Host] => androidgmap.letrajet.com
    [User-Agent] => LeTrajet Edition Cèdre
    [letrajet-sig] => 32dbc2........
)
这包含两个可能的问题,小写标题名和“è”字符,它们可能在请求和/或比较代码中编码正确,也可能编码不正确。需要核实更多细节,但这:

key is missing : false
MyUserAgent == 'LeTrajet Edition Cèdre' : false
怀疑您的“è”字符存在字符集问题。您需要在进行比较的PHP代码中修复这一点。但是,此问题与数据有关,而与头键无关

您的代码中也包含以下内容:

else if($MyUserAgent == "LeTrajet Edition Cedre"
如果你的数据中有Cèdre,那怎么匹配呢


编辑:根据OP.的注释截断签名。

Will
isset($Hdr[“Custom header”])
返回true?您能在出现问题的地方提供代码吗?对于某些数组,它不起作用是没有意义的,但是当您将内容复制到相同的数组时,它就起作用了。至少,我希望看到一个具体的测试用例来显示这种行为。@Passerby-不,这也不行。@eis-具体的代码就是我描述的。我无法从我的Android应用程序中提供代码。我完全同意这是没有道理的。再次注意:当外部应用程序向PHP服务器发出请求时,会发生这种情况。因此,需要编写一个实际示例进行测试。如果你也是一名Android开发者,我相信你一定能够把这些整合起来。具体的代码,否则它就不会发生。如果没有一个可以复制的可验证的例子,这根本是不可信的。很难接受你关于PHP的股票数据结构“不工作”的解释。你到底从哪里得到的?这根本不是我发布的数据!这是数据用户rlemon在评论中发布的,作为对询问代码的回应。见问题注释。如果这不是正确的数据/源代码,请让我们现在提供正确的数据/源代码。我看到您决定从我的服务器获取我的代码,尽管我声明要保护我的代码。未经我的许可,请删除您在此处复制的数据@西蒙,如果你想保护你的代码,你可能不应该把它发布到互联网上,对吗?我可以在这里编辑它,但这并不意味着它对每个人都可用,也无助于解决问题。@Simon这不是代码,而是属于公共信息的头请求。更不用说你的url永远存储在上面,所以现在在修订版中。在提问之前,你应该先解析掉所有不需要的数据。
else if($MyUserAgent == "LeTrajet Edition Cedre"