久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

dir()、readdir()、scandir()和glob()四種遍歷目錄方法及性能分析

瀏覽:213日期:2022-06-06 13:32:11
目錄
  • 一、使用dir()函數(shù)遍歷目錄
  • 二、使用opendir()、readdir()函數(shù)遍歷目錄
  • 三、使用glob()函數(shù)遍歷目錄
  • 四、使用php scandir函數(shù)遍歷目錄和所有文件
  • 五、測試以上四種方法的性能并分析結果

       php遍歷目錄和文件的場景在很多時候都能用到,遍歷目錄方法的方法有好幾種,那么應該使用哪種方法呢?一般情況下,遍歷目錄時只需遍歷出目錄和文件,如果要遍歷子目錄下目錄和文件,就需要用到is_dir()判斷是否問目錄,若是目錄則遞歸遍歷。php中遍歷目錄用到的函數(shù)有dir()、readdir()、scandir()和glob(),那么四個函數(shù)有什么區(qū)別呢?性能又如何呢?

一、使用dir()函數(shù)遍歷目錄

    dir()函數(shù)是以對象的方式訪問目錄,如果成功,返回一個 Directory 類實例,參數(shù)錯誤的情況下返回 NULL , 其它錯誤情況返回 false。
    代碼

function mydir($path){
    $dir = dir($path);
    while(false !== ($file = $dir -> read())){
if($file != "." && $file != ".."){
    if(is_dir($path . $file)){
echo "目錄:" . $path . $file . "<br/>"; 
mydir($path . $file . "/");
}else{
echo "文件:" . $path . $file . "<br/>";
}
    }
}
    $dir -> close();
    }

二、使用opendir()、readdir()函數(shù)遍歷目錄

    相關函數(shù)
        函數(shù)opendir()用于打開指定目錄,接受一個目錄的路徑及目錄名作為參數(shù),函數(shù)返回值為可供其他目錄函數(shù)使用的目錄句柄(資源類型)。如果該目錄不存在或者沒有訪問權限,則返回FALSE。
        函數(shù)readdir()用于讀取指定目錄,接受已經用opendir()函數(shù)打開的可操作目錄句柄作為參數(shù),函數(shù)返回當前目錄指針位置的一個文件名,并將目錄指針向后移動一位。當指針位于目錄的結尾時,因為沒有文件存在則返回FALSE。
        函數(shù)closedir()關閉指定目錄,接受已經用opendir()函數(shù)打開的可操作目錄句柄作為參數(shù)。函數(shù)無返回值,運行后關閉打開的目錄。
        函數(shù)rewinddir()倒回目錄句柄,接受已經用opendir()函數(shù)打開的可操作目錄句柄作為參數(shù)。將目錄指針重置目錄到開始處,即倒回目錄的開頭。

function myreaddir($path){
    $handle = opendir($path);
    if($handle){
while (false !== ($file = readdir($handle))) {
    if($file != "." && $file != ".."){
if(is_dir($path.$file)){
    echo "目錄:" . $path . $file . "<br/>"; 
    myreaddir($path . $file . "/");
}else{
    echo "文件:" . $path . $file . "<br/>";
}
    }
}
    closedir($handle);
    return false;
    }
}

三、使用glob()函數(shù)遍歷目錄

    glob() 函數(shù)返回匹配指定模式的文件名或目錄,該函數(shù)返回一個包含有匹配文件 / 目錄的數(shù)組,如果出錯返回 false。
    代碼

function myglob($path){
    foreach(glob($path) as $file){
if($file != "." && $file != ".."){
    if(is_dir($file)){
echo "目錄:" . $file . "/";
myglob($file . "/*");
    }else{
echo "文件:" . $file . "";
    }
}
    }
} 

其中參數(shù)$path 有三種情況:

    參數(shù)$path=’*.*’,表示掃描當前目錄下的文件,不包括文件夾,返回的是一個數(shù)組。
    參數(shù)$path=’images/*’,表示掃描指定目錄下所有的文件,包括文件夾,也可以掃描指定的文件類型,如:images/*.jpg;注意,如果只輸入:images只會返回該文件夾名稱,如果只輸入:images/ 則什么也不會返回。

    參數(shù)$path=’*’,表示掃描指定目錄下的所有文件、目錄及子目錄的文件。

四、使用php scandir函數(shù)遍歷目錄和所有文件

<?php
$dir = "."; //當前目錄
list_file($dir);
function list_file($dir){
    $list = scandir($dir); // 得到該文件下的所有文件和文件夾
    foreach($list as $file){//遍歷
$file_location=$dir."/".$file;//生成路徑
if(is_dir($file_location) && $file!="." &&$file!=".."){ //判斷是不是文件夾
    echo "------------------------sign in $file_location------------------";
    list_file($file_location); //繼續(xù)遍歷
}
echo "<br/>";
    }
}
?>

五、測試以上四種方法的性能并分析結果

<?php
set_time_limit(0);
for($i = 1; $i <= 5; $i++){
    $starttime = microtime(true);
    mydir("./");
    //scandir("./");
    //myreaddir("./");
    //myglob("*");
    $endtime = microtime(true);
    $total = ($endtime - $starttime) * 1000;
    echo "第 $i 次,用時 $total 毫秒;";
}
?>

       通過測試可以看出,在單一遍歷時dir()、readdir()函數(shù)效率完敗glob()函數(shù);而遞歸遍歷時,glob()函數(shù)性能稍微好一點,但優(yōu)勢不是很高。

       dir()函數(shù) Directory 類的實例,而 Directory 類中封裝的read()方法與readdir()函數(shù)功能一樣,所以使用dir()和readdir函數(shù)遍歷目錄時,性能差別不大。

       到此這篇關于dir()、readdir()、scandir()和glob()四種遍歷目錄方法及性能分析的文章就介紹到這了,更多相關dir()、readdir()、scandir()和glob()區(qū)別內容請搜索以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
主站蜘蛛池模板: 97久久久久久久久久久久 | 久久99国产精品 | 天堂精品久久 | 精品久久国产 | 国产精品日韩一区二区 | 看全黄大色黄大片老人做 | 国产精品美女久久久久久不卡 | 午夜影院免费视频 | 超碰8| 国产一区二区精品在线观看 | 在线亚洲精品 | aaaaaa黄色片 | www久| 日韩成人在线一区 | 欧美99| 男人久久天堂 | 久久精品久久久久电影 | 91精品国产91久久久久久最新 | 日韩精品在线免费观看视频 | 成人h漫在线观看 | 成人狠狠干 | 久久久久久亚洲精品 | t66y最新地址一地址二69 | 国内精品一区二区 | 国产视频一区二区在线 | 中文字幕色 | 国产视频久久 | 极品久久 | 亚洲精品一区二区三区四区高清 | av黄色在线 | 中文字幕高清在线 | 在线h观看| 日韩精品一区二区三区在线 | 国产精品毛片一区二区 | 亚洲免费在线观看 | 国产精品久久久久久久久免费软件 | 亚洲免费人成在线视频观看 | 免费黄色特级片 | 久久久久久久91 | 成人久久久精品乱码一区二区三区 | 国产精品久久久久久久久久久久久久久久 |