文件系統操作是後端開發基礎能力。本文匯總 13 個 Demo,覆蓋路徑解析、屬性獲取、讀寫模式、資源鎖定、目錄遍歷、磁盤空間查詢等實戰技巧。
$path = 'C:\AppServ\www\Demo1.php';
echo basename($path); // Demo1.php
echo dirname($path); // C:\AppServ\www
print_r(pathinfo($path));
// ['dirname'=>'...', 'basename'=>'...', 'extension'=>'php', 'filename'=>'Demo1']
echo realpath('../index.php'); // 相對轉絕對路徑
echo round(filesize($path)/1024, 2) . ' KB';
echo round(disk_free_space('C:')/1024/1024/1024, 2) . ' GB'; // 可用空間
echo round(disk_total_space('C:')/1024/1024/1024, 2) . ' GB'; // 總空間
date_default_timezone_set('Asia/Shanghai');
echo '訪問時間:' . date('Y-m-d H:i:s', fileatime($path));
echo '修改時間:' . date('Y-m-d H:i:s', filemtime($path)); // 內容修改
echo '狀態修改:' . date('Y-m-d H:i:s', filectime($path)); // 權限/屬主變更
| 模式 | 含義 | 指針位置 | 創建/截斷 |
|---|---|---|---|
| r | 只讀 | 開頭 | 不創建 |
| w | 只寫 | 開頭 | 創建/截斷 |
| a | 追加 | 結尾 | 創建 |
| r+/w+/a+ | 讀寫 | 開頭/開頭/結尾 | 同上 |
| b | 二進制安全(推薦加上) | — | — |
$fp = fopen('file.txt', 'ab'); // 追加二進制
fwrite($fp, "內容\r\n");
flock($fp, LOCK_EX); // 獨佔鎖
// ... 寫入 ...
flock($fp, LOCK_UN); // 解鎖
fclose($fp);
file_put_contents($file, $data, FILE_APPEND|LOCK_EX):原子寫入file_get_contents($file):讀整個文件到字符串file($file):按行讀入數組readfile($file):直接輸出到瀏覽器(大文件下載)$fp = fopen('file.txt', 'r');
while (!feof($fp)) {
echo fgets($fp); // 或 fgetc($fp) 單字符
}
fclose($fp);
// 存在性檢查
if (file_exists('file.txt')) { ... }
// 刪除文件
unlink('a.txt');
// 目錄操作
$dir = opendir('C:\AppServ\www');
while ($file = readdir($dir)) { echo $file . '<br>; }
closedir($dir);
// 掃描目錄(含 . 和 ..)
print_r(scandir('path'));
// 刪除空目錄
rmdir('delMe');
// 重命名/移動(文件/目錄通用)
rename('old.txt', 'new.txt');
file_get_contents 爆內存。flock 或 file_put_contents(..., LOCK_EX))。
3. 路徑拼接用 DIRECTORY_SEPARATOR 或 __DIR__ . '/sub',跨平台兼容。
4. 上傳文件重命名存儲,防同名覆蓋與路徑遍歷攻擊。
5. 定期清理臨時目錄,防止 inode 耗盡。