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

PHP fopen() 函數全解析:文件創建、讀寫、追加與遠程 URL 操作實戰

     編輯:PHP 綜合知識

核心概念

PHP 沒有獨立的「創建文件」函數,fopen() 既是打開文件,也是創建文件的關鍵。當指定寫入模式(w、a、x 等)打開不存在的文件時,fopen() 會自動創建並返回文件資源句柄。

語法與參數詳解

resource fopen(string $filename, string $mode [, bool $use_include_path = false [, resource $context ]])

mode 參數完整對照表

模式說明指針位置創建文件清空內容
r只讀開頭否否
r+讀寫開頭否否
w只寫開頭是是
w+讀寫開頭是是
a追加結尾是否
a+讀寫追加結尾是否
x排他創建/寫入開頭是(僅不存在時)否
x+排他創建/讀寫開頭是(僅不存在時)否

特殊模式補充

  • b:二進制模式(Windows 建議加上,如 rb、wb)
  • t:文本模式(Windows 下自動轉換 \n 為 \r\n)

實戰代碼示例

1. 創建並寫入文件

$file = 'data.txt';
$handle = fopen($file, 'w') or die("無法創建文件: $file");
fwrite($handle, "初始內容\n");
fclose($handle);

2. 讀取文件內容

$handle = fopen($file, 'r');
$content = fread($handle, filesize($file));
fclose($handle);
echo $content;

3. 追加內容(不覆蓋原有數據)

$handle = fopen($file, 'a') or die("打開失敗");
fwrite($handle, "新增行 1\n");
fwrite($handle, "新增行 2\n");
fclose($handle);

4. 讀寫模式(r+ / w+ / a+)

// r+:讀寫不清空,指針在開頭
$handle = fopen($file, 'r+');
fwrite($handle, "覆蓋開頭");
fclose($handle);

5. 遠程 URL 讀取(需開啟 allow_url_fopen)

$fh = fopen("https://api.example.com/data.json", "r");
if ($fh) {
    while (!feof($fh)) {
        echo fgets($fh);
    }
    fclose($fh);
}

常見問題與注意事項

  • 權限問題:確保 PHP 進程對目標目錄有寫入權限
  • 安全模式/open_basedir:可能限制跨目錄訪問
  • allow_url_fopen:php.ini 中必須開啟才能打開遠程 URL
  • 資源洩漏:務必使用 fclose() 關閉句柄
  • 大文件處理:避免一次性 fread() 全部內容,應分塊讀取

最佳實踐建議

  1. 優先使用 file_put_contents() / file_get_contents() 簡化單次操作
  2. 需要精確控制指針、分塊處理大文件時使用 fopen() 系列
  3. 二進制文件(圖片、壓縮包)務必加 b 模式
  4. 異常情況下使用 or die() 或 try-catch 保證程序健壯性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved