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


cURL on 10 000 URLs - 500 internal error

我有这个尴尬的问题,我的脚本可以工作,但它在大量查询中失败。我需要对数据库中的每个外部 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 个内部错误。

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

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

我知道这不是最好的解决方案,但它是一个解决方案。

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