檔案操作是後端開發的基石。PHP 提供豐富的內建函數,從簡單的單次讀寫到精細的指標控制皆有對應工具。本文系統整理最常用的檔案函數,附上實戰範例與最佳實踐。
回傳布林值,是執行讀寫前的必要防禦性檢查。
<?php
$path = 'C:\\data\\config.ini';
if (file_exists($path)) {
echo "檔案存在:$path";
} else {
echo "找不到檔案:$path";
}
// 也可檢查目錄
var_dump(file_exists('C:\\data\\logs'));
提醒:Windows 路徑在雙引號字串中需雙重跳脫\\\\,或改用正斜線/避免混淆。
最簡潔的讀取方式,回傳字串;失敗回傳 false。
<?php
$content = @file_get_contents('C:/data/hello.txt');
if ($content !== false) {
echo $content;
} else {
echo '讀取失敗';
}
適用於小型檔案(設定檔、模板);大檔案請改用串流讀取避免記憶體耗盡。
提供精細控制,支援多種模式(r、w、a、x 及其 + 變體)。
| 模式 | 說明 | 指標位置 | 建立檔案 | 截斷檔案 |
|---|---|---|---|---|
| r | 唯讀 | 開頭 | 否 | 否 |
| r+ | 讀寫 | 開頭 | 否 | 否 |
| w | 唯寫 | 開頭 | 是 | 是 |
| w+ | 讀寫 | 開頭 | 是 | 是 |
| a | 唯寫 | 結尾 | 是 | 否 |
| a+ | 讀寫 | 結尾 | 是 | 否 |
| x | 唯寫 | 開頭 | 僅不存在時 | 否 |
| x+ | 讀寫 | 開頭 | 僅不存在時 | 否 |
<?php
$fp = fopen('C:/data/info.txt', 'r');
if ($fp) {
// 操作檔案...
fclose($fp); // 必須關閉釋放資源
}
搭配 feof() 判斷結尾,適合大型日誌或 CSV 解析。
<?php
$fp = fopen('C:/data/sites.txt', 'r');
if ($fp) {
while (!feof($fp)) {
$line = fgets($fp);
if ($line !== false) {
echo "站點: " . htmlspecialchars(trim($line)) . "<br>";
}
}
fclose($fp);
}
回傳寫入位元組數;需先以可寫模式開啟。
<?php
$fp = fopen('C:/data/write.txt', 'w');
if ($fp) {
$bytes = fwrite($fp, "It is awesome.\n");
echo "寫入 $bytes 位元組";
fclose($fp);
}
若需追加而非覆蓋,改用 a 模式開啟。
內部封裝 fopen/fwrite/fclose,支援 FILE_APPEND 旗標追加寫入。
<?php
$path = 'C:/data/log.txt';
// 覆蓋寫入
file_put_contents($path, "首行記錄\n");
// 追加寫入
file_put_contents($path, "新增記錄\n", FILE_APPEND);
回傳寫入位元組數,失敗回傳 false。現代 PHP 開發首選此函數,程式碼更簡潔易維護。
file_get_contents / file_put_contentsfopen 系列=== false 嚴格比較/,跨平台相容性最佳