自 PHP 5.0 起php便增加了一些內置的組件和接口,比如SPL(標准php庫,全稱:Standard PHP Library),該庫定義的一些類和接口極大的方便了php開發人員輕松快速的開發實際項目。本篇文章將簡單記錄一下SPL庫中的一個關於文件夾(目錄)處理的類,DirectoryIterator。
關於處理文件夾(目錄),首先看一下傳統的處理辦法,可參看本站文章:
php讀取目錄並列表顯示目錄中的文件的函數
下面用 DirectoryIterator 類實現如上連接文章中的辦法:
function listDir($dir){ if(!file_exists($dir)||!is_dir($dir)) return ''; $dir=new DirectoryIterator($dir); $dirList=array('dirNum'=>0,'fileNum'=>0,'lists'=>''); while($dir->valid()){ if($dir->getFilename()!=='.'&&$dir->getFilename()!=='..'){ $dirList['lists'][$dir->key()]['name']=$dir->getFilename(); if($dir->isDir()){//判斷是否是目錄 $dirList['dirNum']++; $dirList['lists'][$dir->key()]['isDir']=1; }else{ $dirList['fileNum']++; $dirList['lists'][$dir->key()]['isDir']=''; } } $dir->next(); } return $dirList; }
下面是關於 DirectoryIterator 類中比較常見的一些方法及說明:
方 法
描 述
DirectoryIterator::__construct
由路徑構建一個新的目錄迭代器
DirectoryIterator::current
返回當前對象(Iterator接口所要求的方法)
DirectoryIterator::getATime
得到文件的最後訪問時間
DirectoryIterator::getCTime
得到文件的inode修改時間
DirectoryIterator::getChildren
如果這是一個目錄,為當前項返回一個迭代器
DirectoryIterator::getFilename
返回當前目錄項的文件名
DirectoryIterator::getGroup
得到文件組
DirectoryIterator::getInode
得到文件inode
DirectoryIterator::getMTime
得到文件的最後修改時間
DirectoryIterator::getOwner
得到文件所有者
DirectoryIterator::getPath
返回目錄路徑
DirectoryIterator::getPathname
返回當前目錄項的路徑和文件名
DirectoryIterator::getPerms
得到文件權限
DirectoryIterator::getSize
得到文件大小
DirectoryIterator::getType
得到文件類型
DirectoryIterator::isDir
如果當前項是一個目錄,返回true
DirectoryIterator::isDot
如果當前項是.或..,返回true
DirectoryIterator::isExecutable
如果文件可執行,返回true
DirectoryIterator::isFile
如果文件是一個常規文件,返回true
DirectoryIterator::isLink
如果文件是一個符號鏈接,返回true
DirectoryIterator::isReadable
如果文件可讀,返回true
DirectoryIterator::isWritable
如果文件可寫,返回true
DirectoryIterator::key
返回當前目錄項
DirectoryIterator::next
移動到下一項
DirectoryIterator::rewind
將目錄指針返回到開始位置
DirectoryIterator::valid
檢查目錄中是否包含更多項
另外 SPL 類庫中處理目錄的方法還有 RecursiveDirectoryIterator 方法,這個方法與 DirectoryIterator 方法的區別就是可以獲取包括子目錄在內的所有文件。
關於 RecursiveDirectoryIterator 的方法有:
方 法
描 述
RecursiveDirectoryIterator::getChildren
如果這是一個目錄,為當前項返回一個迭代器
RecursiveDirectoryIterator::hasChildren
返回當前項是否是一個目錄而不是.或..
RecursiveDirectoryIterator::key
返回當前目錄項的路徑和文件名
RecursiveDirectoryIterator::next
移動到下一項
RecursiveDirectoryIterator::rewind
將目錄指針返回到開始位置
RecursiveIteratorIterator::current
訪問當前元素值
RecursiveIteratorIterator::getDepth
得到遞歸迭代的當前深度
RecursiveIteratorIterator::getSubIterator
得到當前活動子迭代器
RecursiveIteratorIterator::key
訪問當前鍵
RecursiveIteratorIterator::next
前移到下一個元素
RecursiveIteratorIterator::rewind
將迭代器返回到頂級內層迭代器的第一個元素
RecursiveIteratorIterator::valid
檢查當前位置是否合法
可以看到,SPL可以很快、很高效地處理你可能遇到的有關目錄的所有問題。
另外關於 php DirectoryIterator 類的靠譜解釋可參看php類庫的標准文檔:
http://php.net/manual/en/class.directoryiterator.php