我收到此错误消息:
Error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 13343871 bytes)
我并不感到惊讶,因为它是在一个脚本上生成一个包含数千条记录的报告(通过成千上万的SQL查询获得 - 从本质上来说它不会是一个高效的脚本)。这是一个很慢的脚本,没关系 - 我在页面上收到一条警告,通知用户这个。
我只是不希望发生此错误。
生成的CSV文件在我看来是完整的(就数据而言),但在CSV文件的底部,我得到了一个堆栈跟踪和OutOfMemoryException异常,如上面的消息所示。
对于脚本的这个特定部分,我已经覆盖了PHP默认值:
ini_set('memory_limit', '512M');
ini_set('max_execution_time', 300);
我还有什么可以做的吗?
答案 0 :(得分:0)
从您的问题可以清楚地看出,您已经为PHP分配了512 MB的RAM,但是当您遇到异常时,您的脚本需要的不仅仅是这样。如果您的PC上有更多RAM功能,只需将此RAM分配增加到更高的值即可。
但是,将所有内容保存在内存中并不是一个好主意。你应该把它写成磁盘和块。释放使用过的内存以最大限度地减少使用。
答案 1 :(得分:0)
我肯定会建议增加机器的内存。耗尽内存绝对不是一个好主意,并且会阻止你的脚本执行它应该的,如果不是的话 - 取决于具体情况。
在抑制错误方面 - IE。堆栈跟踪 - 您正在接收,请确保已使用
关闭错误报告ini_set('display_startup_errors', 0);
ini_set('display_errors', 0);
error_reporting(0);
这只有在内存耗尽并未完全停止执行时才会起作用。