給定一個目錄路徑,遞迴列出其下所有子目錄與檔案完整路徑。常見於面試題目與檔案系統掃描需求。
<?php
/**
* 遞迴遍歷目錄
* @param string $dirname 目標目錄絕對路徑
*/
function traversal($dirname) {
// 規範路徑
$dirname = rtrim($dirname, '/\\');
if (!is_dir($dirname)) {
die("錯誤:路徑不存在或非目錄 - $dirname");
}
$handle = opendir($dirname);
if (!$handle) {
die("無法開啟目錄: $dirname");
}
while (($file = readdir($handle)) !== false) {
// 跳過 . 與 ..
if ($file === '.' || $file === '..') continue;
$fullPath = $dirname . DIRECTORY_SEPARATOR . $file;
echo "<br>$fullPath";
if (is_dir($fullPath)) {
// 遞迴進入子目錄
traversal($fullPath);
}
}
closedir($handle);
}
// 使用範例
traversal('./filepath');
?>
function scanDirRecursive($path) {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $fileInfo) {
echo "<br>" . $fileInfo->getPathname();
}
}
./filepath/subdir1 ./filepath/subdir1/file_a.txt ./filepath/subdir2 ./filepath/subdir2/file_b.jpg ./filepath/file_c.php
DIRECTORY_SEPARATOR 確保跨平台相容。