所以我希望能够通过一个简单的解决方案来从数据库中读取记录并将它们保存到用户下载的文本文件中。我一直在动态执行此操作,并且记录了不到 20,000 条记录,效果很好。超过 20,000 条记录,我将太多数据加载到内存中,PHP 遇到了致命错误。
我的想法是把所有东西都分成几块。所以我抓取 XX 行并将它们回显到文件中,然后循环获取下 XX 行,直到完成。
不过,我现在只是在回应结果,而不是构建文件然后将其发送以供下载,我猜我必须这样做。
简而言之,此时的问题是,在多达 20,000 行的情况下,文件可以完美地构建和下载。不仅如此,我得到一个空文件。
编码:
header('Content-type: application/txt');
header('Content-Disposition: attachment; filename="export.'.$file_type.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
// I do other things to check for records before, hence the do-while loop
$this->items = $model->getItems();
do {
foreach ($this->items as $k => $item) {
$i=0;
$tables = count($this->data['column']);
foreach ($this->data['column'] as $table => $fields) {
$columns = count($fields);
$j = 0;
foreach ($fields as $field => $junk) {
if ($quote_output) {
echo '"'.ucwords(str_replace(array('"'), array('\"'), $item->$field)).'"';
} else {
echo ''.$item->$field.'';
}
$j++;
if ($j<$columns) {
echo $delim;
}
}
$i++;
if ($i<$tables) {
echo $delim;
}
}
echo "\n";
}
} while($this->items = $this->_model->getItems());