介紹幾個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 class="brush:php;toolbar:false">"); print_r($array_file); print_r(""); ?>
以上是介紹幾種php遍歷目錄與資料夾的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!