程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php遍歷目錄與文件夾的幾種方法

php遍歷目錄與文件夾的幾種方法

編輯:關於PHP編程

     遍歷目錄或遍歷目錄下指定類型的文件,這是每一個童鞋在寫程序的時候難免會用到的。PHP本身也提供了很多灰常有用的函數,正確地使用它們,不會有錯滴。

    下面就我個人學習過程中的一些總結,希望對想學PHP的童鞋有所幫助。

    //本函數可以列出指定目錄下所有的文件(包括子目錄下的)

    代碼如下

    function getfiles($path){
    foreach(scandir($path) as $afile)
    {

    if($afile=='.'||$afile=='..') continue;
    if(is_dir($path.'/'.$afile))
    {
    getfiles($path.'/'.$afile);
    } else {
    echo $path.'/'.$afile.'<br />';
    }
    }
    } //簡單的demo,列出當前目錄下所有的文件

    getfiles(__DIR__);

     

    scandir() 是返回指定目錄下所有的文件和目錄組成的數組,在PHP中,還提供了一個灰常強大的函數glob(),glob()有2個參數,至於第2個參數是可選的,稍後再講。 直接來看,用glob()怎麼遍歷目錄的。

    //
    //可以看出,glob()返回的內容中已經過濾掉了'.'和'..',其中*表示遍歷目錄下所有文件。相應的,如果改為*.txt,則會遍歷目錄下所的txt文件。是不是很方便呢?它的方便之處可不止這一點,據元芳說,這裡面還藏著一個天大的秘密,是什麼呢?以後再說,有興趣的話,可以給我留言交流。

    代碼如下

    function getfiles($path){
    foreach(glob($path) as $afile){
    if(is_dir($afile))
    { getfiles($afile.'/*'); } else { echo $afile.'<br />'; }
    }
    } //簡單的demo,列出當前目錄下所有的文件
    getfiles(__DIR__);0

     

    既然說用 *.txt,就會遍歷目錄下所的txt文件,那如果我想讓它同時遍歷某幾種格式的文件呢?怎麼辦?肯定有童鞋想到用數組了,然後很快的寫出來替換進去{*.txt,*.jpg,*.zip,...},當然也很快地發現,程序返回false,什麼都得不到。不要失望,這涉及到了剛才所說的第2個可選參數,這個參數是用來改變glob的行為的,具體都有些什麼,可以查閱PHP手冊,這裡不多講,只說一個GLOB_BRACE,這是用來擴充 {a,b,c,...} 來匹配 'a','b' 或 'c',...的。用法如下:foreach(glob($path.'/{*.txt,*.jpg,*.zip,...}', GLOB_BRACE) as $fileName){...}

    至於完整的遍歷目錄下所有的指定文件類型函數,我們可以看下面實例


    遍歷文件夾及子文件夾所有文件

    代碼如下


    <html>
    <body>
    <?php
    function traverse($path = '.') {
    $current_dir = opendir($path); //opendir()返回一個目錄句柄,失敗返回false
    while(($file = readdir($current_dir)) !== false) { //readdir()返回打開目錄句柄中的一個條目
    $sub_dir = $path . DIRECTORY_SEPARATOR . $file; //構建子目錄路徑
    if($file == '.' || $file == '..') {
    continue;
    } else if(is_dir($sub_dir)) { //如果是目錄,進行遞歸
    echo 'Directory ' . $file . ':<br>';
    traverse($sub_dir);
    } else { //如果是文件,直接輸出
    echo 'File in Directory ' . $path . ': ' . $file . '<br>';
    }
    }
    }

    traverse('xxtt');
    ?>
    </body>
    </html>

     

    一些常用的實例

    代碼如下

    <?php
    $dir="E:/video"; //這裡輸入其它路徑
    //PHP遍歷文件夾下所有文件
    $handle=opendir($dir.".");
    echo "文件:<br>";
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    echo $file; //輸出文件名
    }
    }
    closedir($handle);
    ?>

     

    用了這段代碼遍歷所有文件,幫我把所有文件名存為一個數組。

    代碼如下

    <?php
    $s=explode("/n",trim(`dir/b e://video`));
    print_r($s);
    ?>

    <?php
    $dir="E:/video"; //這裡輸入其它路徑
    //PHP遍歷文件夾下所有文件
    $handle=opendir($dir.".");
    echo "文件:<br>";
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    $file=$file.','; //輸出文件名
    $file=explode(',',$file);
    }
    }
    print_r($file);//輸出的就是數組了
    closedir($handle);
    ?>

    <?php
    $dir="."; //這裡輸入其它路徑
    //PHP遍歷文件夾下所有文件
    $handle=opendir($dir.".");
    echo "文件:<br>";
    //定義用於存儲文件名的數組
    $array_file = array();
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    $array_file[] = $file; //輸出文件名
    }
    }
    closedir($handle);

    print_r("<pre>");
    print_r($array_file);
    print_r("</pre>");
    ?>

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved