如何使用PHP以编程方式检查有效(非死机)链接?

Glo*_*ish 15 php url cron

给出一个网址列表,我想检查每个网址:

  • 返回200 OK状态代码
  • 返回X时间内的响应

最终目标是一个能够将URL标记为可能已损坏的系统,以便管理员可以查看它们.

该脚本将使用PHP编写,并且很可能每天通过cron运行.

该脚本将一次处理大约1000个网址.

问题分为两部分:

  • 有没有像这样的操作的重大陷阱,你遇到了什么问题?
  • 考虑到准确性和性能,在PHP中检查URL状态的最佳方法是什么?

Hen*_*ing 18

使用PHP cURL扩展.与fopen()不同,它还可以发出HTTP HEAD请求,这些请求足以检查URL的可用性并节省大量的带宽,因为您不必下载要检查的整个页面.

作为一个起点,你可以使用这样的函数:

function is_available($url, $timeout = 30) {
    $ch = curl_init(); // get cURL handle

    // set cURL options
    $opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser
                  CURLOPT_URL => $url,            // set URL
                  CURLOPT_NOBODY => true,         // do a HEAD request only
                  CURLOPT_TIMEOUT => $timeout);   // set timeout
    curl_setopt_array($ch, $opts); 

    curl_exec($ch); // do it!

    $retval = curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200; // check if HTTP OK

    curl_close($ch); // close handle

    return $retval;
}
Run Code Online (Sandbox Code Playgroud)

但是,有大量可能的优化:您可能希望重新使用cURL实例,如果每个主机检查多个URL,甚至可以重用连接.

哦,这段代码严格检查HTTP响应代码200.它不遵循重定向(302) - 但也有一个cURL选项.


ant*_*tik 6

看看cURL.有一个PHP库.

还有一个cURL的可执行版本,所以你甚至可以用bash编写脚本.