【发布时间】:2012-01-14 19:51:57
【问题描述】:
我有一个每秒收集的传感器数据数据库。客户希望能够以 CSV 格式下载 12 小时的块 - 这一切都完成了。
遗憾的是,输出不是直接数据,需要在创建 CSV 之前进行处理(部分以 JSON 形式存储在数据库中) - 所以我不能只转储表格。
所以,为了减少负载,我认为第一次下载文件时,我会将其缓存到磁盘,然后再有任何请求只需下载该文件。
如果我不尝试编写它(使用 file_put_contents,FILE_APPEND),并且只是回显每一行,它很好,但是编写它,即使我给脚本 512M 它也会耗尽内存。
这样就可以了
while($stmt->fetch()){
//processing code
$content = //CSV formatting
echo $content;
}
这不是
while($stmt->fetch()){
//processing code
$content = //CSV formatting
file_put_contents($pathToFile, $content, FILE_APPEND);
}
似乎我什至认为我在每一行都调用 file_put_contents,它把它全部存储到内存中。
有什么建议吗?
【问题讨论】:
-
你有没有试过用 fwrite() 来逐行写?