我有一个将MySQL数据库导出为CSV格式的PHP脚本。奇怪的CSV格式是第三方软件应用程序的要求。它最初起作用,但是现在我在743行的内存不足了。我的托管服务有66MB的限制。CSV导出脚本内存不足
我的完整代码在这里列出。 http://pastebin.com/fi049z4n
是否有替代品可以使用array_splice
?任何人都可以帮助我减少内存使用量。什么功能可以改变?我如何释放内存?
我有一个将MySQL数据库导出为CSV格式的PHP脚本。奇怪的CSV格式是第三方软件应用程序的要求。它最初起作用,但是现在我在743行的内存不足了。我的托管服务有66MB的限制。CSV导出脚本内存不足
我的完整代码在这里列出。 http://pastebin.com/fi049z4n
是否有替代品可以使用array_splice
?任何人都可以帮助我减少内存使用量。什么功能可以改变?我如何释放内存?
你必须改变你的CSV
创建策略。相反,如果从数据库中读取整个结果到内存中的数组必须sequencially工作:
CSV
文件(或也许缓冲)这样你的脚本的内存消耗不升道具与结果中的行数成比例,但保持(或多或少)恒定。
这或许可以作为一个未经测试的例子素描的想法:
while (FALSE!==($row=mysql_fetch_result($res))) {
fwrite ($csv_file."\n", implode(',', $row));
}
增加内存限制和最大执行时间
例如:
// Change the values to suit you
ini_set("memory_limit","15000M");
ini_set("max-execution_time", "5000");
@Ben Carey感谢您修复错字。 – uvinod
是的,将内存限制增加到512MB可以修复它,但这只是一个临时解决方案,因为数据仍然会增加100倍。 – Rynardt
你把这个放在哪里? – SeanKendle
你好,请在这里展示的代码的相关部分。张贴Pastebin链接*单独*是皱眉(虽然它们有时作为补充有用)。谢谢! –
读取和写入块。对于cli解释器来说'66M'也非常低。通常没有理由限制气候解释者。与您的主机交谈。 – KingCrunch
你想在内存中构建整个东西吗?请向我们展示一些代码或伪代码。 –