使用fputcsv时内存泄漏

时间:2013-06-19 03:51:27

标签: php memory-leaks fputcsv

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

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

以下是我的代码片段:

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);
}

1 个答案:

答案 0 :(得分:0)

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

意味着您的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()确实是空的,那么可能会有不同的问题,对不起,我无法帮助:)