10 000个网址上的cURL - 500个内部错误

时间:2015-01-27 22:16:15

标签: php curl

我有这个尴尬的问题,我的脚本可以运行,但它在大量查询时失败了。 我需要抓取数据库中的每个外部URL。想法是获取他们的响应代码,如果响应代码不满意删除URL。这是我的代码。

for($i=0;$i<$num;$i++){ 
$url=mysql_result($resultURL, $i );
$massiveArray[] = $url;}

foreach ( $massiveArray as $url) {
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
curl_setopt($ch, CURLOPT_NOBODY, true);  
curl_exec($ch); 
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch); 

    if ( ($retcode == 200) || ($retcode == 201) || ($retcode == 204) || ($retcode == 300) || ($retcode == 301) || ($retcode == 302)) {

        $countOK += 1;  

            }
            echo  '<a target="_blank" href="'.$url . '">'.$url.'</a> -  OK ' . $retcode . '<br /> ';
    } else {

        $countBAD +=1; 
        echo $url .  ' -  BAD ' . $retcode . '<br />'; 
        mysql_query('DELETE FROM `urls` WHERE `url` = "'.$url.'"');     
    }}          

我有大约10 000个网址,所以我真的需要做到这一点。我试图延长php执行时间等等,但当脚本达到大约100个已检查的URL时,会发生500内部错误。

1 个答案:

答案 0 :(得分:0)

我也面临类似的问题,我也试图延长php执行时间,但我看不到任何变化。

我所做的是,将查询数量限制为100(在您的情况下可能是另一个数字)。此脚本在1分钟内执行并且成功结果。然后我每1分钟在该脚本上运行“Cron Job”。通过这种方式,我可以完成所有10,000个URL。

我知道这不是最佳解决方案,但它是一种解决方案。

希望有所帮助。如果您找到更好的答案,请告诉我。