我有这个尴尬的问题,我的脚本可以工作,但它在大量查询中失败。我需要对数据库中的每个外部 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。
我知道这不是最好的解决方案,但它是一个解决方案。
希望有帮助。如果您找到更好的答案,请告诉我。