2013-06-19 39 views
0

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

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

回答

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()确实是空的,那么可能会有不同的问题,我很抱歉我忍不住:)