CSV导出脚本内存不足

Ryn*_*rdt 3 php

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

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

有没有其他选择array_splice?任何人都可以帮我减少内存使用量.可以改变哪些功能?我该如何释放内存?

ark*_*cha 7

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

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

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

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

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