在php中的批量链接检查器

时间:2016-04-20 06:21:03

标签: php curl

如果链接的状态(通过可能的重定向)仍然有效(例如状态200),我想检查数据库中的链接。以下脚本是我目前使用的。限制是超过+/- 400个链接,服务器给我500个内部错误。不幸的是,我无法查看服务器日志的原因是什么,我的假设是它是一个超时问题。

如何使这个脚本具有可扩展性,以便它可以让我运行更多的当前+/- 400个链接?

function urlValidator($url) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 30);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);

    $data = curl_exec($ch);

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpcode != '200') {
        echo $url;
        echo " - ". $httpcode;
    }
}

// creation of $url_array
//

foreach($url_array as $url){

    if(!is_null($url)) {
        urlValidator($url);
    }
}

我确实尝试将flush()和/或ob_flush()添加到代码中,但它没有帮助(或实现错误)。

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

PHP脚本的默认执行时间为30秒。之后会超时。

您可以将此时间增加到以下内容:

ini_set('max_execution_time', 600); //10 minutes

但是,为了使其真正可扩展,我会将当前的“链接检查”状态存储在数据库中,以便您可以继续从中断处继续并让多个实例调用您的脚本。