前言
fopen($file, 'r') 以唯讀模式開啟檔案,返回檔案資源控制代碼。本文涵蓋模式對照、讀取方法、資源釋放、錯誤處理與現代 SplFileObject 替代方案。
fopen 模式速查表
| 模式 | 說明 | 指標位置 | 建立檔案 |
| r | 唯讀 | 開頭 | 否 |
| r+ | 讀寫 | 開頭 | 否 |
| w | 唯寫(截斷) | 開頭 | 是 |
| w+ | 讀寫(截斷) | 開頭 | 是 |
| a | 唯寫(附加) | 結尾 | 是 |
| a+ | 讀寫(附加) | 結尾 | 是 |
| x | 唯寫(獨佔建立) | 開頭 | 僅不存在時 |
| c | 唯寫(不截斷) | 開頭 | 是 |
基本讀取流程
<?php
$file = '/tmp/data.txt';
$handle = fopen($file, 'r');
if ($handle === false) {
die("無法開啟檔案: $file");
}
echo "資源型別: " . gettype($handle) . "\n"; // resource
// 逐行讀取
while (($line = fgets($handle)) !== false) {
echo $line;
}
// 或一次讀取全部
// $content = stream_get_contents($handle);
// $content = file_get_contents($file); // 更簡潔
fclose($handle); // 必須關閉釋放資源
?>
常見讀取函數比較
| 函數 | 行為 | 適用場景 |
| fgets($handle) | 讀取一行(含換行符) | 逐行處理大檔案 |
| fgetcsv($handle) | 解析 CSV 行 | CSV 匯入 |
| fread($handle, $length) | 讀取指定位元組 | 二進位檔案、固定長度 |
| stream_get_contents($handle) | 讀取剩餘所有 | 中小檔案一次讀完 |
| file_get_contents($file) | 開啟→讀取→關閉一氣呵成 | 簡單讀取,不需資源控制 |
現代替代:SplFileObject
<?php
$file = new SplFileObject('/tmp/data.txt', 'r');
$file->setFlags(SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
foreach ($file as $lineNum => $line) {
echo "Line $lineNum: $line\n";
}
// 自動關閉,無需 fclose
?>
總結
fopen($file, 'r') 是檔案讀取基礎,掌握模式差異、逐行讀取與 fclose() 資源釋放。現代專案推薦 SplFileObject 物件導向風格,自動管理資源生命週期。希望本文對您的 PHP 程式設計有所幫助。
- 上一篇文章: PHP 建立目錄:mkdir() 函數完整用法、遞迴建立與權限設定
- 下一篇文章: PHP file() 函式讀取檔案內容至陣列
Copyright ©
程式碼之家 All Rights Reserved