可供用户下载的CSV文件,但文件大小停留在500 KB左右

时间:2018-08-23 10:03:12

标签: php csv download export-to-csv fwrite

更新:看起来这是我的误会。原因是库文件上的PHP 5遇到了内存泄漏问题的问题。因此,每次像这样的高负载传递给函数时,它们的文件都说**我必须清除内存我创建一个新对象的时间。

对我的错误代码调查表示歉意。


  • 引擎:不带框架的PHP 5.6
  • 浏览器:Chrome 68.0.3440.106
  • 服务器:XAMPP 3.2.2捆绑包

对于下面的代码,我要做的是将数据作为assoc数组收集,然后发送到此函数,然后该函数将设法通过网络写入文件。

我从 stackoverflow 找到了该功能的解决方案,它适用于较小的数据量。

非常大的数据出现了问题,我不知道有多少。但是它包含超过50行和超过300列。每个单元格包含空白字符串数字日语单词文本

代码可以正常工作,直到下载过程完成,我使用Chrome进行监视,并且在使用所有下载页面(Ctrl+J)进行查看时,代码始终停留在492 KB且加载进度无限循环栏,直到达到我设置为 30分钟max_execution_time

我有这样写的下载部分:

function downloadArrayAsCsv($rows, $fileName) {

    // BOM (Byte Order Mark)!!!
    echo "\xEF\xBB\xBF";

    header_remove();
    header('Content-Type: text/csv; charset=Shift-JIS');
    header('Content-Disposition: attachment; filename="' . $fileName . '"');

    $fp = fopen('php://output', 'w');

    $_row = '';
    foreach ($rows as $row) {
        foreach($row as $k => $r) {

            if(is_string($r) && (intval($r)==0 || preg_match('/[A-Za-z\p{Hiragana}\p{Katakana}\p{Han}]+/', $r)) && !empty($r))
                $_row .= '"'.trim(preg_replace('/[\"]+/', '""', $r)).'"';
            else
                $_row .= $r;

            $_row .= ',';
        }
        $_row = substr($_row, 0, -1);
        $_row .= "\r\n";

        fwrite($fp, $_row);
        $_row = '';
    }

    fclose($fp);
}

1 个答案:

答案 0 :(得分:0)

尝试编辑您的php.ini文件:

memory_limit = 640M
max_input_time = 1000
post_max_size = 2000M
file_uploads = On
upload_max_filesize = 200M
max_file_uploads = 200
allow_url_fopen = On