PHP应用程序内存耗尽

3
我正在编写一组爬虫类,它会抓取一个起始页面,并基于参数(使用类似于jquery的选择器的Simple Html Dom Parser找到)提取三个链接,然后抓取这些页面,接着进入第二页,选取下面的三个页面。目前最大页面数为57次。
不用说,我遇到了“内存分配大小达到 50331648 字节”的错误信息。
有没有什么方法可以避免内存耗尽?
让你知道,在提取第一页的内容之后,我运行一个go()函数,该函数将不断地提取页面,直到达到 $this->maxpages。我想我可以在实例化类时运行循环,但这样有帮助吗?
1个回答

5
您可以调整内存限制:
ini_set('memory_limit', '128M');

但我会尽量减少脚本使用的内存。确保释放不再需要存在的任何数据/引用。

memory_get_usage() 在调试内存使用累积的情况下很有用。

此外,如果您没有使用PHP 5.3,可以考虑升级,因为它的垃圾回收器更好。


完美的答案,我会标记它。你能举几个如何释放数据/引用的例子吗?这类似于取消设置变量等吗? - Liam Bailey
1
如果没有对某个对象的引用,它最终将被销毁。因此,$foo = new Foo(); $foo = new Foo(); 不会泄漏任何数据... 您不需要 unset() 第一个实例。但是循环引用(例如,父引用子,子引用父)在 5.3 以下版本中不会被释放。因此,这样的事情将在脚本运行期间累积。搜索 PHP 循环引用主题以获取更多信息。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接