首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 目錄操作:DirectoryIterator 類別完整應用指南

     編輯:PHP 相關知識

現代化目錄掃描:告別 opendir/readdir

PHP 5 引入 DirectoryIterator 及 SPL 迭代器,提供物件導向、鏈式操作、記憶體效率更好的目錄處理方式。

基礎用法

<?php
$dir = new DirectoryIterator(__DIR__); // 當前目錄

foreach ($dir as $fileinfo) {
    // 跳過 . 和 ..
    if ($fileinfo->isDot()) continue;
    
    echo $fileinfo->getFilename() . ' ';
    echo $fileinfo->isDir() ? '[DIR]' : '[FILE]';
    echo ' Size: ' . $fileinfo->getSize() . ' bytes';
    echo ' Modified: ' . date('Y-m-d H:i:s', $fileinfo->getMTime());
    echo "\n";
}
?>

常用方法速查表

方法說明回傳型別
getFilename()檔名(含副檔名)string
getPathname()完整路徑string
getPath()目錄路徑(不含檔名)string
isFile()是否為一般檔案bool
isDir()是否為目錄bool
isLink()是否為符號連結bool
isReadable()是否可讀bool
isWritable()是否可寫bool
isExecutable()是否可執行bool
getSize()檔案大小(位元組)int
getMTime()最後修改時間(Unix 時間戳)int
getPerms()權限(八進位)int
getOwner()擁有者 UIDint
getGroup()群組 GIDint

進階應用:遞迴掃描與過濾

<?php
// 遞迴掃描所有 PHP 檔案
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(__DIR__, 
        RecursiveDirectoryIterator::SKIP_DOTS)
);

$phpFiles = new RegexIterator($iterator, '/\.php$/i');

foreach ($phpFiles as $file) {
    echo $file->getPathname() . ' (' . $file->getSize() . " bytes)\n";
}

// 計算目錄總大小
$totalSize = 0;
foreach (new RecursiveIteratorIterator(
         new RecursiveDirectoryIterator('/var/www', RecursiveDirectoryIterator::SKIP_DOTS)
     ) as $file) {
    if ($file->isFile()) $totalSize += $file->getSize();
}
echo "Total: " . number_format($totalSize / 1024 / 1024, 2) . " MB";
?>

檔案資訊統一取得:stat() 與 SplFileInfo

<?php
$file = new SplFileInfo('/path/to/file.jpg');

// 等同 stat() 陣列但更方便
echo $file->getSize();        // 大小
echo $file->getMTime();       // 修改時間
echo $file->getExtension();   // 副檔名
echo $file->getBasename();    // 檔名
echo $file->getBasename('.jpg'); // 不含副檔名
echo $file->isReadable();     // 權限檢查
?>

舊版函數對照(僅供維護舊碼參考)

  • opendir() / readdir() / closedir() → DirectoryIterator
  • scandir() → DirectoryIterator + iterator_to_array()
  • glob() → GlobIterator
  • pathinfo() → SplFileInfo::getExtension() 等
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved