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

PHP CSV 檔案操作完整攻略:讀寫、下載、編碼、大檔案處理

     編輯:PHP 綜合知識

核心函式速查

函式用途關鍵參數
fputcsv()寫入 CSV 列$handle, $fields, $delimiter=',', $enclosure='"'
fgetcsv()讀取 CSV 列$handle, $length=0, $delimiter=',', $enclosure='"'
str_getcsv()解析 CSV 字串$input, $delimiter=',', $enclosure='"'

六大實戰場景

1. 陣列寫入檔案


2. 直接輸出至瀏覽器下載


3. 讀取並轉碼顯示 (Big5/GBK → UTF-8)

';
while (($row = fgetcsv($fp)) !== false) {
    echo '';
    foreach ($row as $cell) {
        // 自動偵測編碼或指定來源編碼
        $utf8 = mb_convert_encoding($cell, 'UTF-8', 'BIG-5,GBK,UTF-8');
        echo '' . htmlspecialchars($utf8) . '';
    }
    echo '';
}
echo '';
fclose($fp);
?>

4. 記憶體緩衝處理 (避免臨時檔)


5. 大檔案分塊讀取 (生成器)

= $chunkSize) {
            yield $buffer;
            $buffer = [];
        }
    }
    if ($buffer) yield $buffer;
    fclose($fh);
}

// 使用
foreach (csvRows('huge.csv') as $chunk) {
    // 批次寫入資料庫、API 推送...
    processBatch($chunk);
}
?>

6. 指定行/區間讀取 (不載入整檔)

= $end) break;
    }
    fclose($fh); return $result;
}
?>

編碼與相容性避坑指南

  1. Excel 開啟 UTF-8 CSV 亂碼:必須輸出 BOM (EF BB BF) 或存為 UTF-16LE
  2. 欄位含逗號/換行/雙引號:fputcsv 會自動加雙引號包裹並轉義內部雙引號
  3. PHP 版本差異:5.4+ fputcsv 第 4 參數支援 escape_char
  4. 行尾符號:Windows \r\n、Linux \n,fopen 模式用 'r' 自動轉換

效能優化建議

  • 大量寫入:關閉 auto_detect_line_endings、使用 SplFileObject 物件導向介面
  • 超大檔 (>1GB):不要 用 file() 或 fgetcsv 迴圈,改用 LOAD DATA INFILE 直接入庫
  • 記憶體限制:ini_set('memory_limit', '512M') 或分塊處理

現代替代方案

複雜報表建議使用 PhpSpreadsheet 直接產出 .xlsx,支援樣式、公式、多工作表,避免 CSV 編碼地獄。

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