致命错误:允许的 33554432 字节的内存大小已用尽 [重复]
Posted
技术标签:
【中文标题】致命错误:允许的 33554432 字节的内存大小已用尽 [重复]【英文标题】:Fatal error: Allowed memory size of 33554432 bytes exhausted [duplicate] 【发布时间】:2013-05-18 18:34:21 【问题描述】:$html = file_get_html('http://www.oddsshark.com/mlb/odds');
echo $html;
ehcoed时,出现这个问题标题中的错误信息?我以前遇到过类似的问题。在所有情况下,我实际上并不需要增加 php.ini 中的内存。相反,缺少一个需要关闭循环的大括号。我通过 file_get_html 函数请求的这个页面在我的浏览器中显示得很好,但它只是不允许我通过 php 回显 html。
有什么想法吗?
【问题讨论】:
这是什么file_get_html()
函数?
你试过用file_get_contents()
代替file_get_html()
吗?
@Kolink 这是PHP Simple HTML DOM Parser的一部分
还要注意简单的 HTML DOM 解析器:simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak
改用 DOMDocument / SimpleXML。它们对内存进行了更好的优化(对于大多数 PHP 安装来说,Simple HTML DOM Parser 确实不再是必需的)。
【参考方案1】:
为什么不使用更优化内存的库,不再需要简单的 HTML DOM:
$html = new DOMDocument;
$html->loadHTMLFile('http://www.oddsshark.com/mlb/odds');
echo $html->saveHTML();
有关该主题的参考问题提供了更多建议:
How do you parse and process HTML/XML in PHP?【讨论】:
'->:' ... : 是一个错字,对吧?这是一个很好的答案,但我没有看到使用 DOMDocument 来打印 HTTP 请求的原始源,看起来它会生成一个无用的对象并涉及无用的处理...... @FMaz008:是的,冒号:
是一个错字。当然:) - 固定+ Thx。 - 例如:这是用户在问题中做的例子,所以我实际上并没有判断它的高级或低级,只是表明其他库能够在不触发内存的情况下将文档读入内存限制。【参考方案2】:
在 php.ini 文件中增加内存限制
搜索
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
在您的 php.ini 文件中并将其增加到 512M
【讨论】:
如果加载一个 300kb 的 HTML 文件需要超过 33MB 的空间,那么存在的问题不仅仅是内存限制。 也可以直接在PHP文件中设置ini_set('memory_limit', '128M')。 问题可能与 HTML 的内部处理有关,因此要么修复代码,要么增加限制。 除非你修改 PHP Simple HTML DOM Parser 库,如果文件超过 600KB 则放弃,以免占用过多内存。 @Kolink:问题出在库上。而且你不能指望得到它实际修复,因为它在 DOMDocument 和朋友时代是多余的。所以建议增加内存限制——即使不是很有创意——实际上听起来并不是这里最糟糕的建议。另一种方法是替换库(我通常会这样做)。【参考方案3】:我真的不认为这种用法可以证明增加内存是合理的。如果它过去了,那是因为有一个问题:Simple HTML DOM Parser is known to have memory leak.
如果您只需要使用 HTTP 检索远程页面的内容,只需执行以下操作。这是我所知道的从远程页面检索内容的最简单、资源效率最高的方法:
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
如果您需要做更多的高级查询,您可以查看 cURL:http://php.net/manual/en/book.curl.php
【讨论】:
【参考方案4】:编辑你的 php.ini 文件
memory_limit=512M
或者在你的 PHP 文件中添加一行:
ini_set('memory_limit', '512M');
错误将得到解决。
注意:你可以用你的值代替512M
。
【讨论】:
除非出于某种原因,它需要超过 2GB 的内存。以上是关于致命错误:允许的 33554432 字节的内存大小已用尽 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:Joomla 中允许的内存大小为 33554432 字节已用尽(尝试分配 32 字节)
php中允许的内存大小为33554432字节耗尽(尝试分配43148176字节)
致命错误:允许的内存大小为 268435456 字节已用尽(尝试分配 71 字节)
使用 pear :致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 6144 字节)