1

我正在尝试制作脚本来检查站点是向上还是向下。一切正常,但是当站点不是站点时,我的意思是该站点不存在。然后php执行加载时间增加。我想以某种方式处理这个问题。如何检查站点是否不存在并中断 curl 会话?这是我的脚本:

<?php
$ch = curl_init('http://86.100.69.228/'); // e.g. for this will increase execution time because the site doesn't exists
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $status_code;
curl_close($ch);
?>
4

2 回答 2

1

您可以通过设置 cURL 传输的 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 选项来定义超时curl_setopt。如果站点关闭,cURL 将停止工作,您会发现它!

于 2012-05-05T17:40:37.887 回答
1

如果您想检查站点是否已关闭CURL可能不是最佳选择,因为您没有检查完整的 URL,例如http://eample.com/abx.phpx... 当您使用 Comodo http://www.comodo等“安全 DNS”等服务时.com/secure-dns/所有网站都会返回200,因为请求会自动转发以进行验证,因此您将始终使用 IP 地址92.242.144.10 搜索 92.242.144.10加载网站

我的建议只是简单地 ping 服务器

function ping($host)
{
    exec(sprintf('ping -n 2 %s', escapeshellarg($host)), $res, $rval);
    return $rval === 0;
}

$result = ping("86.100.69.228");

直接检查socket

function pingSocket($host, $port = 80, $timeout = 3) {
    $fsock = fsockopen ( $host, $port, $errno, $errstr, $timeout );
    if (! $fsock) {
        return FALSE;
    } else {
        return TRUE;
    }
}

$result = pingSocket ( "86.100.69.228" );

这在大多数情况下效果更好

于 2012-05-05T18:06:55.793 回答