PHP 提供豐富的目錄操作函數,適用於檔案掃描、路徑切換、目錄建立刪除等場景。本文整理核心函數用法與範例。
DIRECTORY_SEPARATOR:系統目錄分隔符(Windows `\`,Linux `/`)PATH_SEPARATOR:路徑分隔符(Windows `;`,Linux `:`)| 函數 | 說明 | 範例 |
|---|---|---|
| getcwd() | 取得目前工作目錄 | echo getcwd(); |
| chdir($dir) | 切換工作目錄 | chdir('public_html'); |
| opendir($path) | 開啟目錄控制代碼 | $dh = opendir('/var/www'); |
| readdir($handle) | 讀取目錄下一個項目 | while ($f = readdir($dh)) ... |
| closedir($handle) | 關閉目錄控制代碼 | closedir($dh); |
| scandir($dir, $order) | 列出檔案陣列,可排序 | scandir('/tmp', 1); // 降冪 |
| mkdir($path, $mode, $recursive) | 建立目錄 | mkdir('a/b/c', 0755, true); |
| rmdir($dir) | 刪除空目錄 | rmdir('empty_dir'); |
| dir($path) | 回傳 Directory 類別實例 | $d = dir('.'); while($e=$d->read())... |
| rewinddir($handle) | 重置目錄指標到開頭 | rewinddir($dh); |
<?php
function listAllFiles($dir) {
$files = [];
$items = scandir($dir);
foreach ($items as $item) {
if ($item === '.' || $item === '..') continue;
$path = $dir . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
$files = array_merge($files, listAllFiles($path));
} else {
$files[] = $path;
}
}
return $files;
}
print_r(listAllFiles(__DIR__));
?>
<?php
$d = dir('/var/www/html');
echo "Handle: {$d->handle}\n";
echo "Path: {$d->path}\n";
while (false !== ($entry = $d->read())) {
echo "$entry\n";
}
$d->close();
?>
<?php
$old = getcwd();
chdir('/tmp');
// 執行臨時操作...
chdir($old); // 還原
?>
DIRECTORY_SEPARATOR 或 /(PHP 自動轉換),避免跨平台問題。scandir() 會一次載入所有檔名到記憶體,超大目錄建議用 opendir() + readdir() 迭代處理。is_readable()、is_writable() 確認權限。rmdir(),參見 PHP 刪除非空目錄函數。熟練掌握目錄函數,能高效實作檔案管理器、靜態站點生成器、自動部署腳本等工具。