作者:小熊2502872357 | 来源:互联网 | 2013-06-25 09:47
递归遍历指定目录下的文件,主要使用php的opendir、opendir、is_dir等函数。具体函数用法请参考php手册。
class queryDir
{
var $files;//存储文件
var $i;//数组下标
var $j;//数组下标及存储文件个数
var $startDir;//起始目录
var $temp;
var $tempDir;//存储顶级目录名
//析构函数,初始化变量
function queryDir()
{
$this->files=array();
$this->i=0;
$this->j=0;
$this->temp=0;
$this->startDir="./";
}
//取得顶级目录名称
function firstDir($startDir)
{
$this->tempDir=basename($this->startDir);
}
//遍历目录函数
function getDir($startDir,$i,$j)
{
//echo $this->startDir;
$handle=opendir($this->startDir);//取得目录句柄
while(false!==($filename=opendir($handle)))
{
$this->files[$this->i][$this->j]=$filename;//把目录下的文件,以二维数组存储
$this->j++;//得到此目录下的文件个数
}
closedir($handle);
}
//判断是否是目录函数
function checkDir($temp)
{
for($k=2;$k<$temp;)//跳过"."和".."文件
{
if(is_dir($this->startDir.$this->files[$this->i][$k]))//判断此文件是否是目录
{
//echo "k=".$k."j=".$this->j." ";
$this->i=$this->files[$this->i][$k];//把当前文件作为数组下标存储
$this->j=0;//文件个数清零
$this->startDir.=$this->i."/";
$this->getDir($this->startDir,$this->i,$this->j);
$this->checkDir($this->j);//递归
$this->startDir=dirname($this->startDir)."/";//返回上一级目录
$this->i=basename($this->startDir);//重新取得此目录的数组下标
//以下修改了返回是顶级目录以及目录中和顶级目录同名时出现的问题
if($this->tempDir==$this->i && basename(dirname($this->startDir))==".")
{
$this->i=0;
}
}
echo $this->startDir.$this->files[$this->i][$k]." ";
$k++;
}
}
}
$obj=new queryDir;
$obj->startDir="./phpzixue.cn/";
$obj->firstDir($obj->startDir);
$obj->getDir($obj->startDir,0,0);
$obj->checkDir($obj->j);
?>
|