CSV导出脚本内存不足

时间:2013-01-23 12:02:16

标签: php

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

我的完整代码列在这里。 http://pastebin.com/fi049z4n

是否有使用array_splice的替代方法?任何人都可以帮我减少内存使用量。可以改变哪些功能?我如何释放记忆?

2 个答案:

答案 0 :(得分:7)

您必须更改CSV创建策略。相反,如果将数据库中的整个结果读入内存中的数组,则必须按顺序执行:

  • 从数据库中读取一行
  • 将该行写入CSV文件(或可能缓冲区)
  • 从内存中释放行
  • 循环播放......

这样,脚本的内存消耗量不会与结果中的行数成比例增加,但会保持(或多或少)不变。

这可能是一个未经考验的例子来描绘这个想法:

while (FALSE!==($row=mysql_fetch_result($res))) {
  fwrite ($csv_file."\n", implode(',', $row));
}

答案 1 :(得分:0)

增加内存限制和最长执行时间

例如:

// Change the values to suit you
ini_set("memory_limit","15000M");
ini_set("max-execution_time", "5000");