好吧,我的朋友给了我这个代码,用于请求标题并将它们与标题应该是什么进行比较。它工作得很好,但我不确定为什么。这是代码:
$headers = apache_request_headers();
$customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759";
foreach ($headers as $header => $value) { // 1
$custom .= "$header: $value"; // 2
}
$mystring = $custom; // 3
$findme = $customheader; // 4
$pos = strpos($mystring, $findme);
if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.
我评论了一些与以下问题有关的数字:
这到底发生了什么?是否将$标题设置为$ header AND $ value?
再次,不知道这里发生了什么。
为什么要将变量设置为其他变量?这是变量被使用的唯一区域,所以有理由将其设置为其他东西吗?
与3相同的问题。
如果这是一个可怕的问题,我很抱歉,但它一直困扰着我,我真的想知道为什么它有效。好吧,我明白为什么它有效,我想我只想更具体地了解。感谢您提供的任何见解。
答案 0 :(得分:3)
$headers = apache_request_headers();
获取标题数组。
$customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759";
定义了它将搜索的“customheader”。
foreach ($headers as $header => $value) { // 1
$custom .= "$header: $value"; // 2
}
循环并创建$custom
变量以保留展开的$key=>$value
标题。
$mystring = $custom; // 3
$findme = $customheader; // 4
$pos = strpos($mystring, $findme);
在展开的字符串中查找$customheader
。
if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.
确实不需要重新分配变量。从本质上讲,它将获取标题数组并将其转换为一个大字符串,然后搜索它以查看$customheader
文本是否存在。
答案 1 :(得分:1)
答案 2 :(得分:1)
apache_request_headers()返回当前请求中所有HTTP
标头的关联数组,如果失败则返回false
。因此,将返回值检查为:
$headers = apache_request_headers();
if(! $headers) {
die("Error fetching headers");
}
1:你正在迭代你得到的关联数组。
2:在数组中形成一串粘合键值对,键和值用冒号分隔
3和4只是将一个变量分配给另一个变量。您可以直接使用:$pos = strpos($custom, $customheader);
代替第3步和第4步。strpos
如果在false
找不到您的$customheader
,则返回$custom
,否则返回找到了位置。
总体而言,此代码段会检查apache_request_headers
返回的标头中是否存在您的自定义标头。