如何检查PHP是否存在url并在几秒钟后使其超时

到目前为止,我使用了两种不同的方法来检查网址:

$h = @get_headers($url);
$status = array();
preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status);
return ($status[1] == 200);

$file_headers = @get_headers($url);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
    $exists = true;
}
return $exists;

我只是不确定如何在指定的秒数后让这些请求超时.我的脚本会挂起几分钟,当一个url不存在时,它最终会以脱机状态返回.有任何想法吗?

解:

使用Curl使用以下代码设置超时:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
curl_close($curl);
preg_match("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches);
return ($matches[1] == 200);

解决方法:

您必须在启用URL处理程序的情况下滚动自己的fsockopen(),这样可以指定超时.但是你从头开始构建自己的HTTP请求,所以更好的解决方案就是使用curl.你可以在那里轻松构造头请求,并用CURLOPT_CONNECTIMEOUT(用于连接)和CURLOPT_TIMEOUT指定超时(一般整体)超时).

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...