我编写了一个脚本来批处理域并检索每个域的数据。对于检索到的每个域,它通过curl连接到远程页面,并一次检索30个域所需的数据。
此页面通常需要2到3分钟才能加载并返回卷曲结果,此时,细节会被解析并放入数组(页面排名工具函数)。
通过CRON运行此脚本后,我不断收到“MySQL服务器已消失”的错误。
任何人都可以告诉我,如果我遗漏了一些明显可能导致此事的原因吗?
// script dies after 4 mins in time for next cron to start
set_time_limit(240);
include('../include_prehead.php');
$sql = "SELECT id, url FROM domains WHERE (provider_id = 9 OR provider_id = 10) AND google_page_rank IS NULL LIMIT 30";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
do {
$url_list[$row['id']] = $row['url'];
} while ($row = mysql_fetch_assoc($result));
// curl domain information page - typically takes about 3 minutes
$pr = page_rank_tools($url_list);
foreach ($pr AS $p) {
// each domain
if (isset($p['google_page_rank']) && isset($p['alexa_rank']) && isset($p['links_in_yahoo']) && isset($p['links_in_google'])) {
$sql = "UPDATE domains SET google_page_rank = '".$p['google_page_rank']."' , alexa_rank = '".$p['alexa_rank']."' , links_in_yahoo = '".$p['links_in_yahoo']."' , links_in_google = '".$p['links_in_google']."' WHERE id = '".$p['id']."'";
mysql_query($sql) or die(mysql_error());
}
}
由于
CJ
答案 0 :(得分:4)
这是因为MySQL连接有自己的超时,当你解析你的页面时,它结束了。您可以尝试使用
增加此超时ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
(如MySQL server has gone away - in exactly 60 seconds中所述)
或者再次调用mysql_connect()。
答案 1 :(得分:2)
因为卷曲花费的时间太长,您可以考虑再次连接数据库,然后再输入LOOP进行更新
答案 2 :(得分:0)
发生此错误的原因有很多。看到这里的列表,它可能是你很容易修复的东西 MySQL Server has gone away