首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 使用 fputcsv 匯出 CSV 檔案並直接輸出至瀏覽器

     編輯:PHP 相關知識

PHP 使用 fputcsv 匯出 CSV 檔案並直接輸出至瀏覽器

當需要將大量資料庫資料匯出為 Excel 相容的 CSV 格式時,使用 PHPExcel 等函式庫容易因記憶體不足而失敗。利用 fputcsv 搭配 php://output 串流,可逐行輸出資料,有效降低記憶體佔用。

核心步驟

  1. 設定 HTTP 標頭指定檔案類型、檔名與快取控制。
  2. 開啟 php://output 寫入串流。
  3. 輸出標題列,並將編碼從 UTF-8 轉為 GBK 以相容中文 Excel。
  4. 從資料庫逐行讀取資料(避免一次性載入所有資料),轉碼後寫入 CSV。
  5. 每處理一定筆數(如 10 萬筆)執行 ob_flush() 與 flush() 釋放輸出緩衝。
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');

$fp = fopen('php://output', 'a');
$head = array('姓名', '性別', '年齡', 'Email', '電話');
foreach ($head as $i => $v) {
    $head[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $head);

$cnt = 0;
$limit = 100000;
while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) {
    $cnt++;
    if ($limit == $cnt) {
        ob_flush();
        flush();
        $cnt = 0;
    }
    foreach ($row as $i => $v) {
        $row[$i] = iconv('utf-8', 'gbk', $v);
    }
    fputcsv($fp, $row);
}

此方式適合百萬筆以上的大量資料匯出,確保伺服器記憶體穩定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved