php遍歷目錄與文件夾的多種方法詳解
遍歷目錄或遍歷目錄下指定類型的文件,這是每一個童鞋在寫程序的時候難免會用到的。PHP本身也提供了很多灰常有用的函數(shù),正確地使用它們,不會有錯滴。
下面就我個人學(xué)習(xí)過程中的一些總結(jié),希望對想學(xué)PHP的童鞋有所幫助。
本函數(shù)可以列出指定目錄下所有的文件(包括子目錄下的)
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,列出當(dāng)前目錄下所有的文件
getfiles(__DIR__);
scandir() 是返回指定目錄下所有的文件和目錄組成的數(shù)組,在PHP中,還提供了一個灰常強大的函數(shù)glob(),glob()有2個參數(shù),至于第2個參數(shù)是可選的,稍后再講。 直接來看,用glob()怎么遍歷目錄的。
可以看出,glob()返回的內(nèi)容中已經(jīng)過濾掉了'.'和'..',其中*表示遍歷目錄下所有文件。相應(yīng)的,如果改為*.txt,則會遍歷目錄下所的txt文件。是不是很方便呢?它的方便之處可不止這一點,據(jù)元芳說,這里面還藏著一個天大的秘密,是什么呢?以后再說,有興趣的話,可以給我留言交流。
function getfiles($path){
foreach(glob($path) as $afile){
if(is_dir($afile))
{ getfiles($afile.'/*'); } else { echo $afile.'<br />'; }
}
} //簡單的demo,列出當(dāng)前目錄下所有的文件
getfiles(__DIR__);0
既然說用 *.txt,就會遍歷目錄下所的txt文件,那如果我想讓它同時遍歷某幾種格式的文件呢?怎么辦?肯定有童鞋想到用數(shù)組了,然后很快的寫出來替換進去{*.txt,*.jpg,*.zip,...},當(dāng)然也很快地發(fā)現(xiàn),程序返回false,什么都得不到。不要失望,這涉及到了剛才所說的第2個可選參數(shù),這個參數(shù)是用來改變glob的行為的,具體都有些什么,可以查閱PHP手冊,這里不多講,只說一個GLOB_BRACE,這是用來擴充 {a,b,c,...} 來匹配 'a','b' 或 'c',...的。用法如下:foreach(glob($path.'/{*.txt,*.jpg,*.zip,...}', GLOB_BRACE) as $fileName){...}
至于完整的遍歷目錄下所有的指定文件類型函數(shù),我們可以看下面實例
遍歷文件夾及子文件夾所有文件
<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; //構(gòu)建子目錄路徑
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);
?>
用了這段代碼遍歷所有文件,幫我把所有文件名存為一個數(shù)組。
<?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);//輸出的就是數(shù)組了
closedir($handle);
?>
<?php
$dir="."; //這里輸入其它路徑
//PHP遍歷文件夾下所有文件
$handle=opendir($dir.".");
echo "文件:<br>";
//定義用于存儲文件名的數(shù)組
$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>");
?>
相關(guān)文章
PHP通過curl獲取接口URL的數(shù)據(jù)方法
今天小編就為大家分享一篇PHP通過curl獲取接口URL的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05PHP中對于浮點型的數(shù)據(jù)需要用不同的方法解決
這篇文章主要介紹了PHP中對于浮點型的數(shù)據(jù)需要用不同的方法解決。需要的朋友可以過來參考下,希望對大家有所幫助2014-03-03ThinkPHP框架實現(xiàn)的MySQL數(shù)據(jù)庫備份功能示例
這篇文章主要介紹了ThinkPHP框架實現(xiàn)的MySQL數(shù)據(jù)庫備份功能,結(jié)合實例形式分析了thinkPHP導(dǎo)出mysql數(shù)據(jù)庫相關(guān)操作實現(xiàn)與使用技巧,需要的朋友可以參考下2018-05-05利用PHP腳本在Linux下用md5函數(shù)加密字符串的方法
這篇文章主要介紹了利用PHP腳本在Linux下用md5函數(shù)加密字符串的方法,只需Linux系統(tǒng)中安裝過PHP然后在命令行中操作文中示例即可,需要的朋友可以參考下2015-06-06laravel框架郵箱認(rèn)證實現(xiàn)方法詳解
這篇文章主要介紹了laravel框架郵箱認(rèn)證實現(xiàn)方法,結(jié)合實例形式詳細分析了laravel框架郵箱認(rèn)證功能的具體實現(xiàn)步驟及相關(guān)操作技巧,需要的朋友可以參考下2019-11-11thinkPHP簡單調(diào)用函數(shù)與類庫的方法
這篇文章主要介紹了thinkPHP簡單調(diào)用函數(shù)與類庫的方法,簡單講述了thinkPHP公共函數(shù)庫的文件位置并結(jié)合實例分析了類庫的調(diào)用方法,需要的朋友可以參考下2017-03-03