我使用fputcsv(显然)在应用程序中创建表的csv文件。我只是将一个2d数据数据发布到:
function formatoutput(&$vals, $key){
foreach($vals AS $row=>&$cell){
$cell = str_replace('"', '""', $cell);
$cell = str_replace(array("\n",','), '', $cell);
}
}
function outputCSV($array) {
$outstream = fopen("php://output", "w");
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals);
}
array_walk($array, "formatoutput");
array_walk($array, "__outputCSV", $outstream);
fclose($outstream);
}
outputCSV(unserialize($_POST['data']));
因此,对于数组中的每一行,它会将其附加到csv文件。好吧,这个工作正常,直到我传入一个大约500或更多行的数组。
使用此功能时是否有尺寸限制?文档没有提到任何内容。或者是否有限制大小的PHP设置?
这里有一个问题:is there a file size limit when creating a csv file using php and mysql?
这基本上要求同样的事情,但即使有明确的答案,它也没有真正解释任何可能的解决方案。它只是声明:
"听起来像您的环境设置有问题 - 不是代码或技术限制。"
答案 0 :(得分:1)
PHP将这些变量加载到内存中。根据您的php.ini设置,每个脚本都有允许使用的最大内存量。
此外,复制变量时,它们占用内存空间的两倍。源内存和目标内存。我不确定fputcsv的内部结构,但是整个数组可能在内部转换为csv“对象”,然后写入文件。
所以,请记住,每次复制时,你的内存使用量都可能翻倍。
至少,请检查php.ini中的“memory_limit”。如果您需要特别为一个脚本增加它,那么您可以使用以下命令在脚本中设置它:
ini_set('memory_limit','16M');