我正在制作一个网站,用于检查网站是否正常运行。我传入了我想检查的网站的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秒之间变化。
非常感谢任何帮助。
谢谢,
萨姆
答案 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)来确定错误详细信息。