CSV 导出脚本内存不足


CSV export script running out of memory

我有一个PHP脚本,可以将MySQL数据库导出为CSV格式。奇怪的CSV格式是第三方软件应用程序的要求。它最初有效,但现在我在第 743 行的内存不足。我的托管服务限制为 66MB。

此处列出了我的完整代码。 http://pastebin.com/fi049z4n

有没有使用array_splice的替代方案?任何人都可以帮助我减少内存使用量。可以更改哪些功能?如何释放内存?

你必须

改变你的CSV创建策略。相反,如果将整个结果从数据库读取到内存中的数组中,则必须按顺序工作:

  • 从数据库中读取一行
  • 将该行写入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");