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

标签 php url timeout

到目前为止,我使用了两种不同的方法来检查 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);

最佳答案

您必须启动自己的 fsockopen() 并启用 URL 处理程序,这允许您指定超时。但随后您就无法从头开始构建自己的 HTTP 请求,因此更好的解决方案是使用 curl .您可以在那里轻松构造一个 head 请求,并使用 CURLOPT_CONNECTIMEOUT(用于连接)和 CURLOPT_TIMEOUT(一般整体超时)指定超时。

关于php - 如何使用 PHP 检查 url 是否存在并使其在几秒后超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852005/

相关文章:

php - 带有重音符号的 XML 字符编码问题

javascript - 从提交查询中删除美元符号

javascript - 在已经定义了一些链接的文本中替换 URL(带链接)

c++ - 为什么在 C 和 C++ 代码中插入 URL 有效?

linux - 如果bash脚本开始超时,如何退出?

java - 在客户端寻找 native java CORBA 的超时属性

php - 使用下拉菜单从 MySQL 提取和发布数据

php - shell_exec php中的语法错误

url - 禁止谷歌索引重定向网址

c++ - 停止 Intellisense 显示超时