这个PHP代码到底是做什么用的?

时间:2010-04-24 02:29:15

标签: php foreach strpos

好吧,我的朋友给了我这个代码,用于请求标题并将它们与标题应该是什么进行比较。它工作得很好,但我不确定为什么。这是代码:

    $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.

我评论了一些与以下问题有关的数字:

  1. 这到底发生了什么?是否将$标题设置为$ header AND $ value?

  2. 再次,不知道这里发生了什么。

  3. 为什么要将变量设置为其他变量?这是变量被使用的唯一区域,所以有理由将其设置为其他东西吗?

  4. 与3相同的问题。

  5. 如果这是一个可怕的问题,我很抱歉,但它一直困扰着我,我真的想知道为什么它有效。好吧,我明白为什么它有效,我想我只想更具体地了解。感谢您提供的任何见解。

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)

  1. 迭代$ header,将每个元素的键分配给$ header,将值赋给$ value。因此,在块内部,我们在单独的变量中获取标题的名称及其值。
  2. 在此步骤中,我们使用点运算符连接单个字符串中的所有标头。基本上,我们将数组中的标题转换为字符串。
  3. 除非在其他地方使用这些变量,否则没有理由重新分配。
  4. 免责声明:我是一个红宝石的人,如果我错了,请纠正我。

答案 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返回的标头中是否存在您的自定义标头。