Directory 函數提供目錄層級的操作:開啟/關閉目錄控制代碼、讀取條目、切換目錄、取得目前工作目錄、掃描目錄內容等。所有函數內建核心,無需安裝。
| 函數 | 說明 |
|---|---|
opendir() | 開啟目錄控制代碼,返回 resource |
readdir() | 從目錄控制代碼讀取下一個條目 (檔案/子目錄名稱) |
closedir() | 關閉目錄控制代碼 |
rewinddir() | 將目錄控制代碼重置到第一個條目 |
scandir() | 返回指定目錄的檔案與子目錄陣列 (含 . 與 ..) |
chdir() | 改變目前工作目錄 |
getcwd() | 取得目前工作目錄絕對路徑 |
chroot() | 改變根目錄 (需 root 權限,僅 CLI/特定環境可用) |
dir() | 返回 Directory 類別實例 (物件導向風格) |
<?php
$path = '/var/www/html';
if ($handle = opendir($path)) {
while (false !== ($entry = readdir($handle))) {
if ($entry !== '.' && $entry !== '..') {
echo $entry . '<br>';
}
}
closedir($handle);
}
?>
<?php
$files = scandir('/var/www/html');
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
echo $file . '<br>';
}
}
?>
<?php
$d = dir('/var/www/html');
while (false !== ($entry = $d->read())) {
if ($entry !== '.' && $entry !== '..') {
echo $entry . '<br>';
}
}
$d->close();
?>
<?php
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/var/www/html', FilesystemIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
echo $file->getPathname() . '<br>';
}
?>
<?php
echo '原目錄: ' . getcwd() . '<br>';
chdir('/tmp');
echo '新目錄: ' . getcwd() . '<br>';
?>
scandir() 或 RecursiveDirectoryIterator,避免 readdir() 循環過慢。realpath() 驗證,防止目錄遍歷攻擊。chroot() 不支援,僅限 Unix-like 系統且需特權。closedir() 釋放資源。