所以我希望能夠通過一個簡單的解決方案來讀取數據庫中的記錄並將其保存到用戶下載的文本文件中。我一直在做這個動作,並且在20,000條記錄下,這個工作很棒。超過20,000條記錄,我正在將太多數據加載到內存中,並且PHP遇到了一個致命錯誤。將1000條記錄輸出到文本文件
我的想法是隻抓住一切。所以我抓住XX行數並將它們回顯到文件中,然後循環獲取下一個XX行,直到完成爲止。
雖然我只是在迴應結果,但沒有構建文件,然後發送下載,我猜我必須這樣做。
這個問題很簡單,最多有20000行,這個文件可以完美地構建和下載。除此之外,我得到一個空文件。
代碼:
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());
命中哪個致命錯誤?知道這將有助於。例如,如果它是超時限制;增加它。內存限制爲 –
。而且我知道我可以增加內存限制(它在VPS上),但我想要一個可以擴展一點的解決方案,因爲它已經達到了25,000個限制,我可能想在某個時間點導出數百萬個 –
我猜測輸出緩衝區在文件末尾刷新之前已經填滿了最大值。嘗試將輸出文件寫入服務器上的磁盤,然後使用'readfile'將其作爲下載文件發送。 – 2013-06-27 02:37:15