最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年12月13日 15:54:28   投稿:yin  
php遍歷目錄和文件的場景在很多時候都能用到,遍歷目錄方法的方法有好幾種,那么應(yīng)該使用哪種方法呢?下面介紹dir()、readdir()、scandir()和glob()四種遍歷目錄方法及性能分析。

       php遍歷目錄和文件的場景在很多時候都能用到,遍歷目錄方法的方法有好幾種,那么應(yīng)該使用哪種方法呢?一般情況下,遍歷目錄時只需遍歷出目錄和文件,如果要遍歷子目錄下目錄和文件,就需要用到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ù)遍歷目錄

    相關(guān)函數(shù)
        函數(shù)opendir()用于打開指定目錄,接受一個目錄的路徑及目錄名作為參數(shù),函數(shù)返回值為可供其他目錄函數(shù)使用的目錄句柄(資源類型)。如果該目錄不存在或者沒有訪問權(quán)限,則返回FALSE。
        函數(shù)readdir()用于讀取指定目錄,接受已經(jīng)用opendir()函數(shù)打開的可操作目錄句柄作為參數(shù),函數(shù)返回當(dāng)前目錄指針位置的一個文件名,并將目錄指針向后移動一位。當(dāng)指針位于目錄的結(jié)尾時,因為沒有文件存在則返回FALSE。
        函數(shù)closedir()關(guān)閉指定目錄,接受已經(jīng)用opendir()函數(shù)打開的可操作目錄句柄作為參數(shù)。函數(shù)無返回值,運行后關(guān)閉打開的目錄。
        函數(shù)rewinddir()倒回目錄句柄,接受已經(jīng)用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=’*.*’,表示掃描當(dāng)前目錄下的文件,不包括文件夾,返回的是一個數(shù)組。
    參數(shù)$path=’images/*’,表示掃描指定目錄下所有的文件,包括文件夾,也可以掃描指定的文件類型,如:images/*.jpg;注意,如果只輸入:images只會返回該文件夾名稱,如果只輸入:images/ 則什么也不會返回。

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

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

<?php
$dir = "."; //當(dāng)前目錄
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/>";
    }
}
?>

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

<?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ù)遍歷目錄時,性能差別不大。

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

相關(guān)文章

  • php 表單提交大量數(shù)據(jù)發(fā)生丟失的解決方法

    php 表單提交大量數(shù)據(jù)發(fā)生丟失的解決方法

    這篇文章主要介紹了php表單提交大量數(shù)據(jù)、上千個文本框時發(fā)生數(shù)據(jù)丟失、數(shù)據(jù)不完整等問題的解決方法,需要的朋友可以參考下
    2014-03-03
  • PHP 網(wǎng)絡(luò)開發(fā)詳解之遠程文件包含漏洞

    PHP 網(wǎng)絡(luò)開發(fā)詳解之遠程文件包含漏洞

    由于PHP支持使用相同的函數(shù)(Function)對本地文件和遠程文件進行操作。因此,一些惡意用戶通過強行使網(wǎng)站上的PHP代碼(Code)包含自己的文件來實現(xiàn)執(zhí)行自己腳本的目的。
    2010-04-04
  • php中隨機函數(shù)mt_rand()與rand()性能對比分析

    php中隨機函數(shù)mt_rand()與rand()性能對比分析

    這篇文章主要介紹了php中隨機函數(shù)mt_rand()與rand()性能對比分析,較為詳細的分析了兩個函數(shù)的具體用法,并以實例形式分析了在不同平臺下的運行效率問題,需要的朋友可以參考下
    2014-12-12
  • PHP的autoload機制的實現(xiàn)解析

    PHP的autoload機制的實現(xiàn)解析

    在使用PHP的OO模式開發(fā)系統(tǒng)時,通常大家習(xí)慣上將每個類的實現(xiàn)都存放在一個單獨的文件里,這樣會很容易實現(xiàn)對類進行復(fù)用,同時將來維護時也很便利
    2012-09-09
  • PHP自定義函數(shù)獲取搜索引擎來源關(guān)鍵字的方法

    PHP自定義函數(shù)獲取搜索引擎來源關(guān)鍵字的方法

    這篇文章主要介紹了PHP自定義函數(shù)獲取搜索引擎來源關(guān)鍵字的方法,涉及php針對來路頁面URL的分析與判斷技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • PHP及Zend Engine的線程安全模型分析

    PHP及Zend Engine的線程安全模型分析

    在閱讀PHP源碼和學(xué)習(xí)PHP擴展開發(fā)的過程中,我接觸到大量含有“TSRM”字眼的宏。通過查閱資料,知道這些宏與Zend的線程安全機制有關(guān),而絕大多數(shù)資料中都建議按照既定規(guī)則使用這些宏就可以,而沒有說明這些宏的具體作用
    2011-11-11
  • php5對象復(fù)制、clone、淺復(fù)制與深復(fù)制實例詳解

    php5對象復(fù)制、clone、淺復(fù)制與深復(fù)制實例詳解

    這篇文章主要介紹了php5對象復(fù)制、clone、淺復(fù)制與深復(fù)制,結(jié)合實例形式詳細分析了php5對象復(fù)制、clone、淺復(fù)制與深復(fù)制相關(guān)概念、原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2019-08-08
  • php微信開發(fā)接入

    php微信開發(fā)接入

    這篇文章主要為大家詳細介紹了php微信開發(fā)接入,通過檢驗signature對請求進行校驗,感興趣的小伙伴們可以參考一下
    2016-08-08
  • php&mysql 日期操作小記

    php&mysql 日期操作小記

    在php的很多成熟框架中,數(shù)據(jù)庫存儲時間都是用int類型而不是datetime類型的
    2012-02-02
  • PHP設(shè)計模式之代理模式的深入解析

    PHP設(shè)計模式之代理模式的深入解析

    本篇文章是對PHP設(shè)計模式中的代理模式進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論

翁源县| 香河县| 衡水市| 洪江市| 收藏| 江北区| 迁安市| 涞源县| 天峻县| 和平县| 九寨沟县| 平乡县| 周宁县| 尉氏县| 清徐县| 剑河县| 桦甸市| 宜州市| 静安区| 柞水县| 盐边县| 界首市| 绿春县| 临泉县| 阆中市| 安图县| 宜州市| 房山区| 肇州县| 南江县| 抚顺市| 磴口县| 穆棱市| 南昌市| 山东省| 拉萨市| 鞍山市| 通州市| 沭阳县| 额尔古纳市| 宁陵县|