我有一个PHP脚本,可以从政府网站上删除数据并将其放入MySQL数据库中以便于搜索。它工作得很好,但是每隔6,000行,它就不能成功地刮掉了。我认为这是phpQuery中的某种内存泄漏,我用来解析我获取的HTML。
Here are the errors,正如您所看到的,它们都在phpQuery文件中。奇怪的是,一旦它出错,我可以在它开始出错的记录中重新启动脚本,并且它可以在另外6,000个左右的记录中正常工作。
有没有人在phpQuery中听说过这种情况?也许有太多的phpQuery对象? (我无法找到'关闭'它们的方法)
或者,你对我能做到的另一种方式有什么建议吗?目前,我必须每40分钟左右手动重启脚本,并且有500,000条肯定会加起来的记录。
答案 0 :(得分:1)
我使用过phpQuery(大规模),我没有注意到这样的错误。
尝试每1000行重新加载phpQuery - 只需清除所有变量,并希望垃圾收集器能解决问题。
答案 1 :(得分:0)
我想要代码样式的新答案;)
在1000行之后动态重新加载脚本的两种方法:
在unix主机上:
exec("php __FILE__ &");
通过http请求:
ignore_user_abort(1);
set_time_limit(0);
... 1000 rows parsed ...
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,1);
curl_exec($curl_handle);
curl_close($curl_handle);
答案 2 :(得分:0)
要从内存中卸载所有或指定的文件我使用
phpQuery::unloadDocuments($id = null);