这个PHP代码究竟做了什么?
好吧,我的朋友给了我这个代码,用于请求标题并将它们与标题的内容进行比较。它完美的工作,但我不知道为什么。下面是代码:这个PHP代码究竟做了什么?
$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.
我评论与涉及以下问题的一些数字:
正是这里发生了什么?它是否将$ headers设置为$ header AND $ value?
再次,不知道这里发生了什么。
为什么设置变量为一个不同的变量?这是变量正在被使用的唯一领域,那么是否有理由将其设置为其他内容?
同样的问题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.
确实不需要重新分配变量。本质上,它将头部数组变成一个大字符串,然后搜索文本以查看是否存在文本。
- 它遍历$ headers,将每个元素的关键字分配给$ header,并将值分配给$ value。因此,在块内部,我们在不同的变量中获取标题的名称和它的值。
- 在这一步中,我们使用点运算符将单个字符串中的所有标题连接起来。实质上,我们将数组中的标题转换为字符串。
- 除非在其他地方使用这些变量,否则没有重新分配的理由。
免责声明:我是一个红宝石的人,所以如果我错了,请纠正我。
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
返回的标题中。
谢谢,这一个解释它是最好的。现在我明白了 :) – Rob 2010-04-24 02:54:53