我有这个尴尬的问题,我的脚本可以运行,但它在大量查询时失败了。 我需要抓取数据库中的每个外部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内部错误。
答案 0 :(得分:0)
我也面临类似的问题,我也试图延长php执行时间,但我看不到任何变化。
我所做的是,将查询数量限制为100(在您的情况下可能是另一个数字)。此脚本在1分钟内执行并且成功结果。然后我每1分钟在该脚本上运行“Cron Job”。通过这种方式,我可以完成所有10,000个URL。
我知道这不是最佳解决方案,但它是一种解决方案。
希望有所帮助。如果您找到更好的答案,请告诉我。