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

PHP 檔案建立、寫入、覆蓋、追加完整操作指南

     編輯:PHP 綜合知識

fopen() 模式完整對照表

模式說明指標位置截斷檔案建立新檔讀/寫
r唯讀檔頭否否讀
r+讀寫檔頭否否讀/寫
w唯寫檔頭是是寫
w+讀寫檔頭是是讀/寫
a唯寫(追加)檔尾否是寫
a+讀寫(追加)檔尾否是讀/寫
x建立唯寫檔頭否獨佔寫
x+建立讀寫檔頭否獨佔讀/寫

x/x+:檔案已存在時失敗回傳 false(原子性建立,避免競態條件)。

基本檔案操作流程

$filename = 'demo.txt';
$content = "Welcome to PHP File Operations!\n";

// 1. 開啟檔案(w+:讀寫、建立、截斷)
$fp = fopen($filename, 'w+');
if (!$fp) {
    die("無法開啟/建立檔案: $filename");
}

// 2. 寫入資料
if (fwrite($fp, $content) === false) {
    die("寫入失敗");
}
echo "寫入成功\n";

// 3. 關閉檔案
fclose($fp);

覆蓋 vs 追加示範

// 覆蓋模式 (w)
$fp = fopen('log.txt', 'w');
fwrite($fp, "第一行\n");
fclose($fp);

$fp = fopen('log.txt', 'w'); // 再次以 w 開啟,內容被清空
fwrite($fp, "第二行(覆蓋)\n");
fclose($fp);
// log.txt 內容:第二行(覆蓋)

// 追加模式 (a)
$fp = fopen('log.txt', 'a');
fwrite($fp, "第三行(追加)\n");
fclose($fp);
// log.txt 內容:
// 第二行(覆蓋)
// 第三行(追加)

完整範例:建立檔案、寫入、讀取、關閉

<?php
$txtFile = "Demo.txt";

// 以 w+ 開啟:讀寫、建立、截斷
if (($fp = fopen($txtFile, "w+")) === false) {
    die("建立檔案失敗: $txtFile");
}
echo "建立檔案成功
"; $str = "Welcome To ItCodeWorld!"; if (!fwrite($fp, $str)) { die("寫入失敗"); } echo "寫入成功: $str
"; fclose($fp); // 驗證讀取 $content = file_get_contents($txtFile); echo "檔案內容: " . htmlspecialchars($content); ?>

換行符號跨平台處理

系統換行符ASCIIPHP 常數
Windows\r\n (CRLF)13, 10PHP_EOL
Linux/macOS\n (LF)10PHP_EOL
Mac OS 9 以前\r (CR)13-

建議使用 PHP_EOL 常數自動適應平台:

fwrite($fp, "第一行" . PHP_EOL);
fwrite($fp, "第二行" . PHP_EOL);

進階:檔案鎖定(併發安全)

$fp = fopen('counter.txt', 'c+'); // c: 不截斷、建立、指標在開頭
if (flock($fp, LOCK_EX)) { // 獨佔鎖
    $count = (int)fread($fp, filesize('counter.txt'));
    $count++;
    ftruncate($fp, 0); // 清空內容
    rewind($fp);       // 指標回開頭
    fwrite($fp, (string)$count);
    fflush($fp);       // 強制寫入磁碟
    flock($fp, LOCK_UN); // 釋放鎖
}
fclose($fp);

常用檔案函數速查

函數用途
file_get_contents()一次讀取整個檔案為字串
file_put_contents()一次寫入字串到檔案(支援 FILE_APPEND、LOCK_EX)
file()讀取檔案為陣列(每行一元素)
fgets()逐行讀取
fread()讀取指定長度
fwrite() / fputs()寫入
fseek() / rewind()移動指標
ftell()取得指標位置
feof()判斷是否到檔尾
filesize()取得檔案大小
unlink()刪除檔案
rename()重命名/移動
copy()複製檔案
file_exists() / is_file() / is_dir()檢查存在性

現代最佳實踐:file_put_contents() 一行搞定

// 覆蓋寫入
file_put_contents('data.txt', $content);

// 追加寫入(鎖定檔案防併發)
file_put_contents('log.txt', $newLine . PHP_EOL, FILE_APPEND | LOCK_EX);

// 讀取整個檔案
$content = file_get_contents('data.txt');

掌握 fopen() 模式差異、換行符跨平台處理、檔案鎖定併發控制,是 PHP 檔案操作的核心功力。日常開發優先使用 file_get_contents()/file_put_contents() 簡化程式碼。

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