当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用PHP以编程方式检查有效(非死机)链接?》经验,为你挑选了2个好方法。

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

返回200 OK状态代码

返回X时间内的响应

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

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

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

问题分为两部分:

有没有像这样的操作的重大陷阱,你遇到了什么问题?

考虑到准确性和性能,在PHP中检查URL状态的最佳方法是什么?

Henning.. 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;
}

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

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



1> Henning..:

使用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;
}

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

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



2> antik..:

看看cURL.有一个PHP库.

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

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有