使用cURL远程检查HTTP状态

时间:2011-06-06 13:54:03

标签: php curl while-loop

我正在尝试根据以下代码生成行。有人能告诉我我做错了什么吗?我无法让错误报告在我所处的地方工作。你能在while循环中使用cURL吗?

while ($row = mysql_fetch_array($result_entries))

  if ($row['active'] == "y") {

    $ch = curl_init($row['url']);

    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // $retcode > 400 -> not found, $retcode = 200, found.
    curl_close($ch);

    if ($retcode == '[4-5][0-9][0-9]'){
        echo "<tr class=\"bad"\"><td><a href=\"" . $row['code'] . "\" target=\"_blank\">". $row['code'] . "</a></td><td>" . $row['url'] . "</td><td>" . $row['requester'] . "</td></tr>\n\n";

    } else if ($retcode == '[2-3][0-9][0-9]'){
        echo "<tr class=\"good"\"><td><a href=\"" . $row['code'] . "\" target=\"_blank\">". $row['code'] . "</a></td><td>" . $row['url'] . "</td><td>" . $row['requester'] . "</td></tr>\n\n";

    } else {
        echo "<tr class=\"inactive\"><td>". $row['code'] . "</td><td>" . $row['url'] . "</td><td>" . $row['requester'] . "</td></tr>\n\n";
    }
}

2 个答案:

答案 0 :(得分:3)

您应该在$retcode变量

上使用数字比较
if($retcode >= 400 && $retcode <= 599) {
  // Code for 400> status here
} else if ($retcode >= 200 && $retcode <= 399) {
  // Code for 200-300 status Here
} else {
  // Fall through case here
}

您的代码未正确地将结果代码与字符串进行比较(您尝试将其视为正则表达式)。

数字比较将更快,更容易阅读,并且更安全的解决方案。

答案 1 :(得分:0)

看起来你正试图在比较中使用正则表达式。 $retcode只是一个整数。它应该是这样的:

if ($retcode == 400){

如果您希望许多代码执行if的相同块,则可以在preg_match()上使用$retcode,尽管使用switch或大于小于if($retcode >= 400 && $retcode <= 599){可能更好即{{1}}。