- 相關(guān)推薦
用PHP遍歷目錄下的全部文件
項目中有這么一個需求,需要遍歷某個文件夾(目錄)下的所有文件。下面是解決這個問題所寫的PHP代碼,歡迎閱讀,更多消息請關(guān)注應(yīng)屆畢業(yè)生網(wǎng)。
第一種實現(xiàn)辦法是用dir返回對象,第二種實現(xiàn)辦法:用readdir()函數(shù)。
/**********************
一個簡單的目錄遞歸函數(shù)
第一種實現(xiàn)辦法:用dir返回對象
***********************/
function tree($directory)
{
$mydir = dir($directory);
echo "
";
while($file = $mydir->read())
{
if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!=".."))
{
echo "
$file
";
tree("$directory/$file");
}
else
echo "
$file
";
}
echo "
";
$mydir->close();
}
//開始運(yùn)行
echo "
目錄為粉紅色
";
tree("./nowamagic");
/***********************
第二種實現(xiàn)辦法:用readdir()函數(shù)
************************/
function listDir($dir)
{
if(is_dir($dir))
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
{
echo "文件名:",$file,"
";
listDir($dir."/".$file."/");
}
else
{
if($file!="." && $file!="..")
{
echo $file."
";
}
}
}
closedir($dh);
}
}
}
//開始運(yùn)行
listDir("./nowamagic");
?>
拓展:PHP遞歸復(fù)制、移動目錄的自定義函數(shù)操作分
雖然復(fù)制一個目錄是文件操作的基本功能。但PHP中也沒有給出特定的函數(shù),同樣需要自定義一個遞歸函數(shù)實現(xiàn)。要復(fù)制一個包含多個子目錄的目錄,將涉及文件的復(fù)制、目錄創(chuàng)建等操作。復(fù)制一個文件可以通過PHP提供的copy()函數(shù)完成,創(chuàng)建目錄可以使用mkdir()函數(shù)。定義函數(shù)時,首先對源目錄進(jìn)行遍歷,如果遇到的是普通文件,直接使用copy()函數(shù)進(jìn)行復(fù)制。如果遍歷時遇到一個目錄,則必須建立該目錄,然后再對該目錄下的文件進(jìn)行復(fù)制操作,如果還有子目錄,則使用遞歸重復(fù)操作,最終將整個目錄復(fù)制完成。自定義的遞歸函數(shù)復(fù)制目錄的程序代碼如下所示:
復(fù)制代碼 代碼如下:
<?php
//自定義函數(shù)遞歸的復(fù)制帶有多級子目錄的目錄
function copyDir($dirSrc,$dirTo){
if(is_file($dirTo)){ //如果目標(biāo)不是一個目錄則退出
echo "目標(biāo)不是目錄不能創(chuàng)建!!";
return; //退出函數(shù)
}
if(!file_exists($dirTo)){ //如果目標(biāo)不是一個目錄則退出
mkdir($dirTo); //創(chuàng)建目錄
}
if($dir_handle = @opendir($directory)){ //打開目錄,并判斷是否能成功打開
while($filename = readdir($dir_handle)){ //循環(huán)遍歷目錄下的所有文件
if($filename != "."&& $filename != ".."){ //一定要排除兩個特殊的目錄
$subFile = $directory."/".$filename; //將目錄下的子文件和當(dāng)前目錄相連
$sunToFile = $dirTo."/".$filename; //將目標(biāo)目錄的多級子目錄相連
if(is_dir($subSrcFile)) //如果為目錄則條件成立
copyDir($subSrcFile,$subToFile); //遞歸調(diào)用自己復(fù)制子目錄
if(is_file($subSrcFile)) //如果是文件則條件成立
copy($subSrcFile,$subToFile); //直接復(fù)制到目標(biāo)位置
}
}
losedir($dir_handle); //關(guān)閉文件資源
}
}
//測試函數(shù),將目錄“phpMyAdmin”復(fù)制到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>
從安全和跨平臺等方面考慮,盡量不要去調(diào)用操作系統(tǒng)的SHELL命令“cp-a”完成目錄的復(fù)制。
【用PHP遍歷目錄下的全部文件】相關(guān)文章:
php遞歸遍歷刪除文件的方法04-02
PHP遍歷目錄文件常用方法03-06
php查找指定目錄下指定大小文件的方法08-03
php文件鎖怎么用07-03
用PHP讀取文件的正確方法04-07
php遍歷數(shù)組的方法分享07-13
php遞歸遍歷多維數(shù)組的方法04-11
如何打開php文件 php文件怎么打開01-13