【发布时间】:2011-04-28 04:41:58
【问题描述】:
任何人在解决 Simple_DOM 内存问题方面有好运吗?我搜索了这些论坛,只发现了对其他解析引擎的推荐。
我的脚本循环遍历 20,000 个文件并从每个文件中提取一个单词。我每次都必须调用 file_get_html 函数。
- 已将其移至其他服务器。结果相同。
- 将 foreach 循环更改为 while 循环。
- 增加内存限制,任一服务器。行不通。
【问题讨论】:
标签: php dom memory loops limit
任何人在解决 Simple_DOM 内存问题方面有好运吗?我搜索了这些论坛,只发现了对其他解析引擎的推荐。
我的脚本循环遍历 20,000 个文件并从每个文件中提取一个单词。我每次都必须调用 file_get_html 函数。
【问题讨论】:
标签: php dom memory loops limit
是的,您可以使用ini_set() 增加内存,但只有您有权这样做。
我的建议是,当您完成循环时,当您完成任务时,取消设置包含大量数据集的变量。
for($i=0;$i < 30000;$i++){
$file = file_get_contents($some_path.$i);
// do something, like write to file
// unset the variables
unset($file);
}
当然这只是一个示例,但您可以将其与您的代码相关联,并确保每个请求都像第一次运行您的文件一样。
祝你好运:)
【讨论】:
在我看来,在单次执行期间处理大量数据的方法存在缺陷。以我的经验,PHP cli 处理并不是真的要长时间运行并处理大量数据。这样做需要非常非常仔细的内存管理。加入一个泄漏的第 3 方脚本,你就有了用头撞桌子的秘诀。
也许您可以一次处理几百个文件,而不是尝试一次运行所有 20k 个文件,将结果存储在某个中间位置,例如 MySQL 数据库,然后在处理完所有文件后收集结果。
【讨论】: