HTTP响应代码0 - 网站正在运行

时间:2016-06-17 11:09:10

标签: php html httpresponse

我正在制作一个网站,用于检查网站是否正常运行。我传入了我想检查的网站的URL,以下代码将检查网站是否有效并返回HTTP响应代码以及true或false。

function urlExists($url=NULL)
{
    if($url == NULL) return false;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($httpcode == 0) {
        return array (false, $httpcode);
    }
    else if($httpcode < 400){
        return array (true, $httpcode);
    } else {
        return array (false, $httpcode);
    }
}

我正在测试其中一个网站,虽然我知道该网站是实时工作的,但我的HTTP响应代码为0。

该站点非常慢,因为它是一个功能不是很强大的服务器上的大型站点,因此响应时间可能在7到25秒之间变化。

非常感谢任何帮助。

谢谢,

萨姆

3 个答案:

答案 0 :(得分:4)

基于以下两个链接: -

https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html

首先是: - set maximum time the request is allowed to take

第二个是: - timeout for the connect phase

正如你所说的那样Site URL你正在做出响应时间为7-25秒。同时,由于这两个时间设置,您的CURL request被终止并关闭。

在代码中增加这两个时间设置,它将适合您。

感谢。

答案 1 :(得分:2)

我将为您提供两种替代方案 - 与您的curl()功能一起,您将有3个选项可以查看哪一种更好/更快。

选项A (所有php版本),需要激活fopen():

if (!$fp = fopen($url, 'r')) 
{
    trigger_error("Unable to open URL ($url)", E_USER_ERROR);

}
$headers = stream_get_meta_data($fp);
fclose($fp);    
$http_header_info = $headers['wrapper_data'][0];
$httpCode = (int)substr($http_header_info, 9, 3);   


选项B (php5 +):

$headers = get_headers($url, 1);
$http_header_info = $headers[0];
$httpCode = substr($http_header_info, 9, 3);

此外,如果有人对这三种方法有基准,我很想知道哪种更合适(当然只检索http响应头)

答案 2 :(得分:0)

当使用无效的URL语法或找不到主机错误时,代码0经常返回。

您还可以调用curl_error($ ch)函数(http://php.net/manual/en/function.curl-error.php)来确定错误详细信息。