【问题标题】:Memory leak while using fputcsv使用 fputcsv 时内存泄漏
【发布时间】:2013-06-19 03:51:27
【问题描述】:

我正在使用内置的 fputcsv 函数通过标准输出 (php://output) 输出一个大的 csv 文件,但是在写入大约 14000 行后出现内存错误。

我调用 ob_end_clean 不使用输出缓冲区,但它不起作用。另外,我尝试在每 X 行之后刷新输出缓冲区,但它是一样的。

这是我的代码的 sn-p:

function outputCSV($data) {
    ob_end_clean(); //Delete buffer contents and disable output buffering
    $outstream = fopen("php://output", "w");
    function __outputCSV(&$vals, $key, $filehandler) {
        fputcsv($filehandler, $vals);
    }
    array_walk($data, "__outputCSV", $outstream);
    fclose($outstream);
}

【问题讨论】:

    标签: php memory-leaks fputcsv


    【解决方案1】:

    您可能会发现自己处于比您意识到的更深层次的输出缓冲中。

    意味着您的ob_end_clean() 实际上只是丢弃并结束当前级别的缓冲。

    要调试这个,你可以添加到你的函数中:

    function outputCSV($data) {
        ob_end_clean(); // Delete topmost buffer
        print_r(ob_list_handlers());  // Dump the remaining output buffer handlers
        exit; // Call exit so we can see what's happenining
    
        // Rest of your code ...
    }
    

    如果print_r 返回的不是空的Array(),那么您在此之上仍有一个或多个级别的输出缓冲。在这种情况下,为每个缓冲区再次调用ob_end_clean()

    如果Array() 确实是空的,那么可能会有不同的问题,很抱歉我帮不上忙 :)

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2015-09-14
      相关资源
      最近更新 更多