【发布时间】:2012-01-12 04:40:55
【问题描述】:
我的 php 脚本即时创建 PDF,数据来自 mysql db 表,它可以正常工作,直到 30 条记录,但比它说的要多
我是来自http://code.google.com/p/dompdf/的dompdf
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 56214 bytes) in F:\xampp\htdocs\wiseworker\dompdf\lib\class.pdf.php on line 3043
不过我用过ini_set("memory_limit","96550M");
并在 php.ini 中设置
; Maximum amount of memory a script may consume (5120MB)
; http://php.net/memory-limit
memory_limit = 96550M
我还增加了查询执行时间
if( !ini_get('safe_mode') ){
set_time_limit(0);
}
但它只是限制在 45 到 65 字节左右,如果 mysql 表包含数百条记录会怎样?
【问题讨论】:
-
尝试unset 任何您可能使用的额外变量或类似的东西怎么样?
-
正如@StasM 所说,您可能没有设置正确的 php.ini 文件。运行 phpinfo() 并检查 memory_limit 的实际值和 php.ini 文件的位置。如果在网络服务器中运行脚本,请重新启动/重新加载它。
-
尝试
echo ini_get('memory_limit');以确保您的内存限制设置正确。 -
@All 我在设置 memory_limit = 94G 后多次测试(重新启动 apache),它显示正好 94G,但仍然显示致命错误:允许的内存大小为 33554432 字节已用尽(尝试分配 57971 字节)在第 2739 行的 F:\xampp\htdocs\wiseworker\dompdf\lib\class.pdf.php 中
-
好的,谢谢大家,我只需要在 dompdf 类中设置 memory_limit = 94G,现在它正在创建大型 pdf,但几分钟后浏览器显示“连接已重置 - 与服务器的连接已重置,而页面正在加载。等等......”虽然我将执行时间增加到 3600 秒 //ini_set('max_execution_time', 3600)