duanchique1196 2011-05-16 17:45
浏览 23
已采纳

编写一个非常大的CSV文件来自PHP的DB输出

I have a DB of sensor data that is being collected every second. The client would like to be able to download 12hour chunks in CSV format - This is all done.

The output is sadly not straight data and needs to be processed before the CSV can be created (parts are stored as JSON in the DB) - so I cant just dump the table.

So, to reduce load, I figured that the first time the file is downloaded, I would cache it to disk, then any more requests just download that file.

If I dont try to write it (using file_put_contents, FILE_APPEND), and just echo every line it is fine, but writing it, even if I give the script 512M it runs out of memory.

so this works

while($stmt->fetch()){
    //processing code
    $content = //CSV formatting
    echo $content;
}

This does not

while($stmt->fetch()){
    //processing code
    $content = //CSV formatting
    file_put_contents($pathToFile, $content, FILE_APPEND);
}

It seems like even thought I am calling file_put_contents at every line, it is storing it all to memory.

Any suggestions?

  • 写回答

2条回答 默认 最新

  • duanjiaopi8218 2011-05-16 17:56
    关注

    The problem is that file_put_contents is trying to dump the entire thing at once. Instead you should loop through in your formatting and use fopen, fwrite, fclose.

    while($stmt->fetch()){
        //processing code
        $content[] = //CSV formatting
        $file = fopen($pathToFile, a);
        foreach($content as $line)
        {
            fwrite($file, $line);
        }
        fclose($file);
    }
    

    This will limit the amount of data trying to be tossed around in data at any given time.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 GD32 SPI通信时我从机原样返回收到的数据怎么弄?
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?