PHP Filesystem 函數完整參考:檔案系統操作大全
簡介
Filesystem 函數提供豐富的檔案與目錄操作功能:開啟/關閉、讀寫、複製、移動、刪除、權限、鎖定、資訊查詢、路徑處理、臨時檔案、CSV 解析等。所有函數內建於 PHP 核心,無需安裝。
執行期設定 (php.ini)
| 指令 | 預設值 | 說明 | 可變範圍 |
| allow_url_fopen | 1 | 允許 fopen 等函數使用 URL (PHP 4.0.4+) | PHP_INI_SYSTEM |
| user_agent | NULL | PHP 發送的 User-Agent (PHP 4.3+) | PHP_INI_ALL |
| default_socket_timeout | 60 | Socket 串流預設逾時秒數 (PHP 4.3+) | PHP_INI_ALL |
| from | "" | 匿名 FTP 密碼 (您的 Email) | PHP_INI_ALL |
| auto_detect_line_endings | 0 | 自動偵測行尾結束符 (Unix/DOS/Mac) (PHP 4.3+) | PHP_INI_ALL |
跨平台路徑相容性
- Unix:正斜線
/ 為目錄分隔符。
- Windows:
/ 與 \ 皆可使用。
- 建議統一使用
/ 或使用 DIRECTORY_SEPARATOR 常數。
核心函數分類速查
| 函數 | 說明 |
fopen() / fclose() | 開啟/關閉檔案或 URL 串流 |
fread() / fwrite() / fputs() | 讀取/寫入開啟的檔案 |
file_get_contents() / file_put_contents() | 一次性讀取/寫入整個檔案到字串 |
file() | 將檔案讀入陣列 (每行一個元素) |
readfile() | 讀取檔案並直接輸出到緩衝區 |
fgets() / fgetc() / fgetss() | 讀取一行/一字元/一行並過濾 HTML/PHP 標籤 |
fgetcsv() / fputcsv() | 解析/寫入 CSV 格式 |
feof() | 檢查檔案指標是否到達 EOF |
fseek() / ftell() / rewind() | 定位/取得當前位置/倒回開頭 |
ftruncate() | 截斷檔案到指定長度 |
fflush() | 刷新緩衝輸出 |
file_exists() / is_file() / is_dir() / is_link() | 檢查存在/是檔案/是目錄/是連結 |
is_readable() / is_writable() / is_executable() | 檢查可讀/可寫/可執行 |
is_uploaded_file() / move_uploaded_file() | 檢查/移動上傳檔案 |
filesize() | 取得檔案大小 (位元組) |
filetype() | 取得檔案類型 |
fileperms() | 取得檔案權限 |
fileatime() / filemtime() / filectime() | 取得最後存取/修改/狀態變更時間 |
fileowner() / filegroup() / fileinode() | 取得擁有者/群組/inode |
chmod() / chown() / chgrp() | 改變模式/擁有者/群組 |
mkdir() / rmdir() | 建立/刪除目錄 |
copy() / rename() / unlink() | 複製/重命名/刪除檔案 |
symlink() / readlink() / link() | 建立/讀取符號連結/建立硬連結 |
lstat() / stat() / fstat() | 取得檔案/連結/開啟檔案的詳細資訊 |
clearstatcache() | 清除檔案狀態快取 |
disk_free_space() / disk_total_space() | 取得目錄可用/總磁碟空間 |
realpath() | 返回規範化絕對路徑 |
pathinfo() | 解析路徑資訊 (dirname/basename/extension/filename) |
basename() / dirname() | 取得檔名/目錄名 |
glob() | 依模式搜尋檔案/目錄 |
tempnam() / tmpfile() | 建立唯一臨時檔案/臨時檔案指標 |
touch() | 設定檔案存取與修改時間 |
umask() | 設定預設權限遮罩 |
flock() | 檔案鎖定/釋放 (共享/獨佔/非阻塞) |
parse_ini_file() / parse_ini_string() | 解析 INI 設定檔/字串 |
popen() / pclose() | 開啟/關閉程序管道 |
fnmatch() | 依模式比對檔名或字串 |
set_file_buffer() | 設定開啟檔案的緩衝大小 |
realpath_cache_get() / realpath_cache_size() | 取得 realpath 快取條目/大小 |
常見操作範例
安全讀取檔案內容
<?php
$file = '/var/www/data/config.json';
if (is_readable($file)) {
$content = file_get_contents($file);
$data = json_decode($content, true);
// 處理 $data
}
?>
原子性寫入 (避免部分寫入被讀取)
<?php
$tmp = tempnam(sys_get_temp_dir(), 'app_');
file_put_contents($tmp, $newContent);
rename($tmp, $targetFile); // 同一檔案系統下為原子操作
?>
目錄遞迴建立
<?php
mkdir('/var/www/data/cache', 0755, true); // recursive=true
?>
CSV 匯出
<?php
$fp = fopen('export.csv', 'w');
fputcsv($fp, ['ID', 'Name', 'Email']);
foreach ($users as $u) {
fputcsv($fp, [$u->id, $u->name, $u->email]);
}
fclose($fp);
?>
效能與安全提示
- 大檔案處理請使用串流 (
fopen/fgets) 避免記憶體耗盡。
- 使用者上傳檔案務必驗證 MIME、副檔名、檔案大小,並儲存於非公開目錄。
- 路徑拼接請使用
realpath() 防止目錄遍歷攻擊。
- 頻繁存取同一檔案資訊時,注意
clearstatcache() 避免快取過期資料。