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

PHP fwrite() 函數深度解析:二進制安全寫入檔案的正確姿勢

     編輯:PHP 相關知識

fwrite():PHP 檔案寫入的核心函數

fwrite() 將字串內容寫入檔案指標指向的位置,支援二進制安全寫入,是處理檔案輸出的基石函數。

函數原型

int fwrite ( resource $handle, string $string [, int $length ] )
  • $handle:由 fopen() 回傳的檔案指標資源。
  • $string:要寫入的資料。
  • $length(可選):最大寫入位元組數。若指定,寫入達到該長度或字串結束時停止;且會忽略 magic_quotes_runtime 設定,斜線不會被剝離。

回傳值

  • 成功:回傳寫入的位元組數(字符數)。
  • 失敗:回傳 FALSE。

關鍵注意事項

  1. Windows 系統區分二進制/文字檔:呼叫 fopen() 時模式需加 'b'(如 'wb'、'ab'),否則換行符可能被轉換導致二進制資料損壞。
  2. 檢查可寫性:寫入前用 is_writable() 確認檔案/目錄權限。
  3. 嚴格比對回傳值:用 === FALSE 判斷失敗,避免寫入 0 位元組被誤判。
  4. 及時關閉:寫入完成呼叫 fclose() 釋放資源、刷新緩衝區。

完整範例:安全追加寫入

<?php
$filename = 'test.txt';
$content  = "新增的內容\n";

// 1. 確認檔案存在且可寫
if (!is_writable($filename)) {
    die("檔案 {$filename} 不可寫");
}

// 2. 以追加模式開啟(二進制安全)
if (!$handle = fopen($filename, 'ab')) {
    die("無法開啟檔案 {$filename}");
}

// 3. 寫入並嚴格檢查
if (fwrite($handle, $content) === FALSE) {
    fclose($handle);
    die("寫入檔案 {$filename} 失敗");
}

echo "成功寫入 {$filename}";
fclose($handle);
?>

進階用法:指定長度寫入

<?php
$data = "這是一段很長的二進制資料...";
$handle = fopen('data.bin', 'wb');
// 僅寫入前 1024 位元組
fwrite($handle, $data, 1024);
fclose($handle);
?>

常見錯誤與避坑指南

錯誤後果正確做法
Windows 下 fopen 模式缺 'b'二進制檔案(圖片、PDF)損壞一律使用 'wb'、'ab'、'rb' 等模式
未檢查 is_writable寫入靜默失敗、難以除錯寫入前驗證權限
用 == FALSE 判斷寫入 0 位元組被誤判為失敗用 === FALSE 嚴格比對
忘記 fclose資源洩漏、資料留在緩衝區配合 try/finally 或 defer 模式確保關閉

總結

fwrite() 配合正確的 fopen() 模式、權限檢查、嚴格錯誤處理,即可可靠地完成文字與二進制檔案的寫入任務。現代專案建議封裝為檔案服務類,統一異常處理與日誌記錄。

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