在 PHP 開發中,文件操作是基礎且核心的技能。無論是處理上傳文件、讀取配置、寫入日誌,還是構建緩存機制,都離不開文件系統的交互。本文系統梳理 PHP 文件操作的核心函數,按功能分類詳細說明,並附帶實用提示,幫助開發者快速查閱與應用。
確定文件性質是操作的前提。
file(普通文件)、dir(目錄)或 unknown。以下函數參數均為文件名(含路徑)。
false。suffix 用於去除擴展名(如 .php)。dirname、basename、extension 三鍵,功能最全。標準流程:opendir() → readdir() → closedir()。
false。false。提示:PHP 5+ 推薦使用 DirectoryIterator 或 RecursiveDirectoryIterator 進行面向對象遍歷,代碼更簡潔健壯。
true)。unlink())和子目錄。PHP 無內置單函數實現,需組合操作:
mkdir() 創建目標目錄 → 遍歷源目錄 → copy() 逐個文件複製。unlink(),目錄用 rmdir())。fopen(filename, mode, [use_include_path, [zcontext]]) 返回文件指針資源,失敗返回 false。
常用模式速查:
| 模式 | 說明 |
|---|---|
| r | 只讀,指針在開頭 |
| r+ | 讀寫,指針在開頭 |
| w | 只寫,截斷文件或創建新文件 |
| w+ | 讀寫,同 w |
| a | 寫入,指針在末尾,創建新文件 |
| a+ | 讀寫,同 a |
| x | 寫入,文件存在則失敗(僅本地) |
| b / t | 二進制 / 文本模式(Windows 區分換行符時需加 b) |
fclose():關閉文件指針,寫入模式下會刷新緩衝區。
\n 或 \r\n。遠程文件訪問:需在 php.ini 啟用 allow_url_fopen=On,並配合 set_time_limit() 防止超時。
whence 可為 SEEK_SET(默認,從開頭)、SEEK_CUR(當前位置)、SEEK_END(從末尾,offset 需為負值)。注意:a/a+ 模式下寫入總在末尾,fseek 無效。fseek($fp, 0))。flock(handle, operation, [&wouldblock]) 防止多進程同時讀寫導致數據錯亂。
LOCK_SH:共享鎖(讀取用)。LOCK_EX:獨占鎖(寫入用)。LOCK_UN:釋放鎖。LOCK_NB:非阻塞模式(配合上述標誌用位或運算)。第三參數若傳 1,鎖定期間阻塞其他進程。
$_FILES 超全局數組| 鍵名 | 含義 |
|---|---|
| name | 原始文件名(含擴展名) |
| size | 文件大小(字節) |
| tmp_name | 服務器臨時存儲路徑 |
| error | 錯誤碼:0成功、1超過 upload_max_filesize、2超過表單 MAX_FILE_SIZE、3部分上傳、4無文件 |
| type | MIME 類型(瀏覽器提供,不可完全信任) |
<?php
header('Content-Type: image/gif');
header('Content-Disposition: attachment; filename="test.gif"');
header('Content-Length: 3390');
readfile('test.gif');
?>
實際項目中建議封裝為工具類,統一處理大文件分塊輸出、斷點續傳、安全校驗等邏輯。