PHP Curl Check 404:始终返回HTTP CODE 200 OK

时间:2014-11-07 08:54:41

标签: php curl nginx http-status-code-404

我正在尝试修复网站上的链接。我必须检查404页面上的所有链接。我使用php curl来检查响应http代码。但奇怪的是它总是返回200 OK。

以下是is_404()的代码,

$curl = curl_init($url);

//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);

//do request
$result = curl_exec($curl);

$ret = true;

//if request did not fail
if ($result !== false) {
    //if request was ok, check response code
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

    if ($statusCode == 200) {
        $ret = false;   
    }
}

curl_close($curl);

return $ret;

即使在显示404页面的页面上,我也总是返回200 OK。服务器使用适当的页面处理所有404。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我有同样的问题,直到我理解这是因为我的网络配置中有多个故障转移IP

host A ( failover ip1,failover  ip2 )

host B ( failover ip1,failover  ip2 )

curl在主机B上创建误报,因为它默认解析了IP,即使故障转移指向主机A,该呼叫也在本地

也许你的配置也一样?

解决问题的简单解决方法:

curl_setopt($ch, CURLOPT_INTERFACE, "eth0");