更新:看起来这是我的误会。原因是库文件上的PHP 5遇到了内存泄漏问题的问题。因此,每次像这样的高负载传递给函数时,它们的文件都说**我必须清除内存我创建一个新对象的时间。
对我的错误代码调查表示歉意。
对于下面的代码,我要做的是将数据作为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);
}
答案 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