今天早上在地鐵上看了關於文件和文件夾的一章,正好最近剛搞懂linux的文件系統,覺得對文件屬性的訪問跟Shell命令很像,所以想晚上來實踐一下。
發現php的文件夾函數好像沒有提供遍歷文件夾下的所有文件(包括子目錄中的文件),於是,就想自己實現一個。
在寫的時候發現一些操作文件夾的函數並不是自己想的那樣。比如,dirname()根據提供的完整文件路徑來取得文件所在的文件夾的路徑,但如果你傳入的是文件夾,它取的就是它的父文件夾。這點要明白。basename()也是同樣的道理,傳入文件夾路徑取得就是文件夾的名字。這兩個函數返回的結果結尾都不加'/'
<?php
$dirPath='/home/WWW/Test';//目錄,結尾不加'/‘
//執行遍歷
recursion_readdir($dirPath);
/**
*@summary 重復times次字符char
*@param $char 需要重復的字符
*@param $times 重復次數
*@return 返回重復字符組成的字符串
*/
function forChar($char='-',$times=0){
$result='';
for($i=0;$i<$times;$i++){
$result.=$char;
}
return $result;
}
/**
*@summary 遞歸讀取目錄
*@param $dirPath 目錄
*@param $Deep=0 深度,用於縮進,無需手動設置
*@return 無
*/
function recursion_readdir($dirPath,$Deep=0){
$resDir=opendir($dirPath);
while($basename=readdir($resDir)){
//當前文件路徑
$path=$dirPath.'/'.$basename;
if(is_dir($path) AND $basename!='.' AND $basename!='..'){
//是目錄,打印目錄名,繼續迭代
echo forChar('-',$Deep).$basename.'/<br/>';
$Deep++;//深度+1
recursion_readdir($path,$Deep);
}else if(basename($path)!='.' AND basename($path)!='..'){
//不是文件夾,打印文件名
echo forChar('-',$Deep).basename($path).'<br/>';
}
}
closedir($resDir);
}
以上這篇PHP遞歸遍歷指定文件夾內的文件實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。