原文地址:遍历文件和文件夹”>php 遍历文件和文件夹作者:流星飞雨

<?php

function list_dir($dirpath){
//判断路径最后面的字符是否是反斜线,如果没有就加上一个
if($dirpath[strlen($dirpath)-1] !=’’){ $dirpath.=’’;}
//申明一个静态变量数组,这样每次递归调用该数组的值还会存在
static $result_array = array();
//判断所给目录是否为目录
if(is_dir($dirpath)){
//获取当前的子目录和文件名
$file_dirs = scandir($dirpath);//scandir – 列出指定路径中的文件和目录
//如果是两个特殊目录,就跳过去
foreach($file_dirs as $file){
if($file == ‘.’ || $file ==’..’){ continue;}
if(is_dir($dirpath.$file)){
//如果是目录,递归调用
list_dir($dirpath.$file.’’);
}else{
//如果是文件,存入数组
array_push($result_array,$dirpath.$file);
}
}
}
return $result_array;
}

//调用函数
$array = list_dir(‘d:php5’);
foreach($array as $value){
echo $value;
echo’
‘;
}

?>

//方法一
function bianli($dir)
{
if(!is_dir($dir)) return;
$files = array();
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file != ‘.’ && $file != ‘..’){
if(is_dir($dir.’/‘.$file)){
$files[$file] = bianli($dir.’/‘.$file);
}else {
$files[] = $file;
}
}
}
}
closedir($handle);
return $files;
}
//方法二
function getdir($path)
{
if(!is_dir($path)) return;
$handle = dir($path);
$files = array();
while($file=$handle->read())
{
if($file!=’.’ && $file!=’..’)
{
$path2 = $path.’/‘.$file;
if(is_dir($path2))
{
$files[$file] = getdir($path2);
}else
{
$files[] = $file;
}
}
}
$handle->close();
return $files;
}
//方法三
function get_dir_scandir($path)
{
if(!is_dir($path)) return;
$tree = array();
foreach(scandir($path) as $single){
if($single!=’.’ && $single!=’..’)
{
$path2 = $path.’/‘.$single;
if(is_dir($path2))
{
$tree[$single] = get_dir_scandir($path2);
}else
{
$tree[] = $single;
}
}
}
return $tree;
}