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

PHP 使用 fputcsv() 函數讀寫 CSV 文件的完整指南

     編輯:PHP 相關知識

PHP 使用 fputcsv() 函數讀寫 CSV 文件的完整指南

在 PHP 開發中,CSV(逗號分隔值)文件是數據交換的常用格式。PHP 內建的 fputcsv() 和 fgetcsv() 函數提供了高效處理 CSV 數據的能力。本文將詳細介紹如何使用這些函數進行 CSV 文件的寫入、讀取以及字符串輸出操作。

1. 將數組數據寫入 CSV 文件

fputcsv() 函數將一維數組格式化為 CSV 格式並寫入文件指針。函數成功時返回寫入的字符數,失敗返回 false。

<?php
$test_array = array(
    array("111","sdfsd","sdds","43344","rrrr"),
    array("sssssssss","gdfgfd","232323","wwewe","dsfds"),
    array("fgfg","e4343","dsfds","w2332","xcvxc"),
    array("11212","2323","344343","344343","rerreer"),
    array("fds","43344444","33333333","ttttttt","gggggggggggg"),
    array("kdfs","dsfdsfds","wewewe","sdsdddddddd","wwwwwwwwwww")
);

$file = fopen("test.csv", "w") or die("無法打開 test.csv");

foreach ($test_array as $line_array) {
    $isSuccess = fputcsv($file, $line_array);
    print $isSuccess . "<br>";
    if ($isSuccess === false) {
        die("無法寫入 CSV 行: " . print_r($line_array, true));
    }
}

fclose($file) or die("無法關閉文件 test.csv");
?>

上述代碼會創建一個包含六行五列數據的 test.csv 文件。

2. 將 CSV 格式化字符串輸出到變量中

有時我們不需要寫入物理文件,而是直接獲取 CSV 格式的字符串。這可以通過 php://output 流配合輸出緩衝區實現:

<?php
$test_array = array(
    array("111","sdfsd","sdds","43344","rrrr"),
    array("sssssssss","gdfgfd","232323","wwewe","dsfds"),
    array("fgfg","e4343","dsfds","w2332","xcvxc"),
    array("11212","2323","344343","344343","rerreer"),
    array("fds","43344444","33333333","ttttttt","gggggggggggg"),
    array("kdfs","dsfdsfds","wewewe","sdsdddddddd","wwwwwwwwwww")
);

ob_start();
$file = fopen("php://output", "w") or die("無法打開輸出流");

foreach ($test_array as $line_array) {
    $isSuccess = fputcsv($file, $line_array);
    if ($isSuccess === false) {
        die("無法寫入 CSV 行: " . print_r($line_array, true));
    }
}

fclose($file);
$result = ob_get_contents();
ob_end_clean();

// $result 現在包含完整的 CSV 格式字符串
echo $result;
?>

3. 使用 fgetcsv() 讀取 CSV 文件

fgetcsv() 從文件指針讀取一行並解析為數組。其參數說明如下:

  • file:必需,文件指針資源
  • length:可選,最大行長度。PHP 5.1.0 後可省略或設為 0 表示不限長度
  • separator:可選,分隔符,默認為逗號
  • enclosure:可選,字段包圍字符,默認為雙引號
  • escape:可選,轉義字符,默認為反斜桿

函數返回解析後的數組,錯誤或到達文件末尾返回 false。

讀取示例:將 CSV 數據顯示為 HTML 表格

<?php
$file = fopen('test.csv', 'r') or die("無法打開文件 test.csv");
$color = "#ff0000";
print '<table border="1">';

while ($csv_line = fgetcsv($file)) {
    print "<tr>";
    $len = count($csv_line);
    for ($i = 0; $i < $len; $i++) {
        if ($i % 2 == 0) $color = "#cccccc";
        else $color = "#999999";
        print '<td bgcolor="' . $color . '">' . htmlentities($csv_line[$i]) . '</td>';
    }
    print "</tr>";
}

print '</table>';
fclose($file) or die("無法關閉文件 test.csv!");
?>

常見問題與最佳實踐

  • 編碼問題:確保文件編碼與 PHP 腳本編碼一致,必要時使用 mb_convert_encoding() 轉換
  • 大文件處理:逐行讀取而非一次性載入全部內存
  • 特殊字符:包含分隔符、換行符的字段會被自動包在 enclosure 字符中
  • 性能優化:批量寫入時可考慮關閉自動刷新緩衝區

掌握 fputcsv() 和 fgetcsv() 將大大提升 PHP 處理結構化數據的效率,特別是在數據導入導出、報表生成等場景中。

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