Php CSV导出脚本内存不足

Php CSV导出脚本内存不足,php,Php,我有一个PHP脚本,可以将MySQL数据库导出为CSV格式。奇怪的CSV格式是第三方软件应用程序的要求。它最初工作正常,但我现在在第743行的内存不足。我的托管服务限制为66MB 我的完整代码列在这里 使用阵列拼接有其他选择吗?有人能帮我减少内存使用吗。哪些功能可以更改?如何释放内存?增加内存限制和最大执行时间 例如: // Change the values to suit you ini_set("memory_limit","15000M"); ini_set("max-execution

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

我的完整代码列在这里


使用
阵列拼接
有其他选择吗?有人能帮我减少内存使用吗。哪些功能可以更改?如何释放内存?

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

例如:

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

您必须更改您的
CSV
创建策略。相反,如果将整个结果从数据库读取到内存中的数组中,则必须依次执行以下操作:

  • 从数据库中读取一行
  • 将该行写入
    CSV
    文件(或缓冲区)
  • 从内存中释放该行
  • 在循环中执行此操作
这样,脚本的内存消耗不会随着结果中的行数成比例地增加,而是保持(或多或少)不变

这可以作为一个未经测试的例子来勾勒这个想法:

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

您好,请在这里显示代码的相关部分。单独发布Pastebin链接是不受欢迎的(尽管它们有时作为一种附加功能很有用)。谢谢分块读写。此外,cli解释器的
66M
非常低。通常根本没有理由限制cli解释器。和你的主人谈谈。你是不是想把整个事情都记在记忆里?请向我们展示一些代码或伪代码。像arkascha建议的那样优化您的策略。然后,还要确保在每次
fputcsv
@Ben Carey之后使用
while(ob_get_level()>0){ob_end_clean()}
flush()
禁用输出缓冲,感谢您修复了打字错误。是的,将内存限制增加到512MB修复了它,但这只是一个临时解决方案,因为数据仍将增加100倍。你把这个放在哪里?谢谢。你有这个例子的链接吗?或者我在哪里可以了解到这种技术?我添加了一个建议方法的草图。目前没有链接。注意转义结果成员中包含的任何分隔符(
)。