没有一个案例符合get_headers()的结果

时间:2010-09-05 13:23:39

标签: php debugging

这个错误给了我几个小时的痛苦。这是我正在做的简化版本:

[01] $h = get_headers($url, 1);
[02] $resp_code = $h[0];
[03] $resp_code = strtolower($resp_code);
[04] $resp_code = str_replace(' ','',$resp_code);
[05] echo 'just before going in. $resp_code = ' . $resp_code . '<br/>';
[06] switch ($resp_code) {
[07]   case 'http/1.1200ok':
[08]     echo '200';
[09]     break;
[10]   case 'http/1.0301movedpermanently':
[11]     echo '301';
[12]     break;
[13]   case 'http/1.0302movedtemporarily':
[14]     echo '302';
[15]     break;
[16]   case 'http/1.0404notfound':
[17]     echo '404';
[18] }
[19] echo 'just got out.';

我得到的输出。尝试不同的网址,是不同的,对于一些网址,它可以正常工作,对于一些网站,它根本不输出任何响应代码!即使从第5行显示的回声中你预计应该输入case之一,但它不会,而下一个输出来自第19行。

您可能想知道为什么我将响应代码转换为所有较低的和已剥离的空格,这是为了尝试分解不同服务器发送的文本之间可能存在的任何细微差别。我不知道是否会发生这种情况,只是为了以防万一,并且出于沮丧:(

可能是字符编码相关吗?通胀/通缩? PHP中的错误?我的系统上有病毒?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

最后三个标题是http/1.0。因此,如果它是1.1服务器并且它不返回200,则不会匹配任何案例。

也许你应该尝试:

$h = get_headers($url, 1);
$h = explode(' ', $h[0]);
$responseCode = $h[1];

switch ($responseCode) {
    case '200':
    // ...
}

答案 1 :(得分:0)

使用$_SERVER['SERVER_PROTOCOL']作为检查HTTP协议版本的基础