php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹相关的知识,希望对你有一定的参考价值。

谢谢了 送上身上最后的100分表示谢谢 要源代码

最近刚写的,可以遍历指定目录下的所有文件、文件夹、特定后缀的文件:

/**
 * 遍历目录
 * @param string $dir 绝对/相对路径
 * @param string $filter 默认*返回所有文件及文件夹,*.php仅返回php文件,如果$patten为GLOB_BRACE可实现多文件筛选,如*.php,html,返回php和html文件
 * @param const $patten 默认GLOB_BRACE,可选:GLOB_ONLYDIR,更多参数请参考手册
 * @param string/bool $nocache 防止本次调用的结果缓存上次的结果,如果一个脚本仅调用一次本函数,则不用管,否则得设个值
 * @return array
 */
function globdir($dir, $filter = '*', $patten = GLOB_BRACE, $nocache = null) 
    static $file_arr = array ();
    isset($nocache) && $file_arr = array ();
    if (!is_dir($dir)) return;
    if ($patten == GLOB_ONLYDIR) 
        $code = 'if (is_dir($file)) $file_arr[] = $file;globdir($file, "*", GLOB_ONLYDIR);';
     else 
        $code = 'is_file($file) ? $file_arr[] = $file : globdir($file,"' . $filter . '",' . $patten . ');';
    
    array_walk(glob("$dir/$filter", $patten), create_function('$file, $k, $file_arr', $code), &$file_arr);
    if ($filter != '*') 
        array_walk(glob("$dir/*", GLOB_ONLYDIR), create_function('$dir,$k,$param', 'list($filter, $patten) = explode("|", $param);globdir($dir, $filter, $patten);'), "$filter|$patten");
    
    return $file_arr;

参考技术A <?php
4 function traverse($path = '.')
5 $current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false
6 while(($file = readdir($current_dir)) !== false) //readdir()返回打开目录句柄中的一个条目
7 $sub_dir = $path . DIRECTORY_SEPARATOR . $file; //构建子目录路径
8 if($file == '.' || $file == '..')
9 continue;
10 else if(is_dir($sub_dir)) //如果是目录,进行递归
11 echo 'Directory ' . $file . ':<br>';
12 traverse($sub_dir);
13 else //如果是文件,直接输出
14 echo 'File in Directory ' . $path . ': ' . $file . '<br>';
15
16
17
18
19 traverse('xxtt');
20 ?>
参考技术B function show_file($path)

$handle=opendir($path);//指定文件夹  
$projectContents = '';
$projectsListIgnore = array ('.','..');//去掉. 和..目录
while ($file = readdir($handle)) 

    if (is_dir($file) && !in_array($file,$projectsListIgnore)) 
            
        $projectContents .= '<li><a href="'.$file.'">'.$file.'</a></li>';
    else
    
      $projectContents .=$file; 
    

closedir($handle);
return $projectContents;

参考技术C php 手册里就有~····· 你还这么多分 悬赏

遍历一个文件夹下的所有文件和子文件夹

遍历一个文件夹下的所有文件和子文件夹

 

相关函数:

  1、opendir(): 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用。

  若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。

  语法:opendir(path,context)

参数

描述

path

必需。规定要打开的目录路径。

context

可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。

 

  2、readdir(): 函数返回由 opendir() 打开的目录句柄中的条目。若成功,则该函数返回一个文件名,否则返回 false。

  语法:readdir(dir_stream)

参数

描述

dir_stream

必需。规定要使用的目录句柄。

  说明:返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。

  3、closedir(): 函数关闭由 opendir() 函数打开的目录句柄。

  4、rewinddir() 函数重置由 opendir() 打开的目录句柄。本函数什么都不会返回。    提示:本函数重读目录,并可用于检查目录中的变化。

 1 <?php
 2    function scandir($dir)
 3    {
 4       $files=array();
 5       if(is_dir($dir))
 6       {
 7          if($handle=opendir($dir))
 8          {
 9             
10             while(($file=readdir($handle))!==false)
11             {
12                if($file!=‘.‘ && $file!=‘..‘)
13                {
14                   if(is_dir($dir.‘/‘.$file))
15                   {
16                      $files[$file]=scandir($dir.‘/‘.$file);
17                   }
18                   else
19                   {
20                      $files[]=$dir.‘/‘.$file;
21                   }
22                }
23             }
24             closedir($handle);
25             return $files;
26          }
27       }
28    }
29    $dir = "F:/Projects/WWW";
30    print_r(scandir($dir));
31 ?>

 

以上是关于php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

写一个能创建多级目录的PHP函数

遍历某个文件夹(目录)下的所有文件

PHP删除当前目录及其目录下的所有文件

php 遍历一个文件夹下的所有文件和子文件夹

php 利用scandir() 函数 扫描出制定目录下的所有文件

遍历一个文件夹下的所有文件和子文件夹