自己写的一个PHP文件目录检索代码,可递归搜索所有子目录或只列出当前目录。

注:本例只会以一维数组的形式列出所有文件/文件夹,不会以多维数组的形式树形列出。

直接上代码

/**
 * 获取指定路径下的文件列表,如果第二个参数为true,
 * 则会递归的列出子目录下的文件
 * @param String $dir 目录
 * @param String $recursion
 */
public static function getFileList($dir, $recursion = false){
    $filelist = array();
    $real_path = realpath($dir);
    if (is_dir($real_path)) {
        if ($dh = opendir($real_path)) {
            while (($file = readdir($dh)) !== false) {
                if (strpos($file, '.') === 0) {
                    continue;
                }
                $full_path = $real_path . DIRECTORY_SEPARATOR . $file;
                $filetype = filetype($full_path);
                $is_dir = $filetype == 'dir';
                $relative_path = str_ireplace(BASEPATH, '', $full_path);
                $relative_path = str_replace('', '/', $relative_path);
                $filelist[] = array(
                    'name'=>$file,
                    'path'=>$full_path,
                    'relative_path'=>$relative_path,
                    'is_dir'=>$is_dir,
                );
                if($is_dir == true && $recursion == true){
                    $subdir = self::getFileList($real_path . DIRECTORY_SEPARATOR . $file, true);
                    $filelist = array_merge($filelist, $subdir);
                }
            }
            closedir($dh);
        }
    }
    return $filelist;
}

例如


print_r(Helper_File::getFileList('./'));


得到如下数组


Array
(
    [0] => Array
        (
            [name] => config
            [path] => D:xampphtdocsminglsjy.hptrunkconfig
            [relative_path] => /config
            [is_dir] => 1
        )

    [1] => Array
        (
            [name] => root.txt
            [path] => /home/evilfox9e6vqi3lnf6ozx/wwwroot/root.txt
            [relative_path] => /root.txt
            [is_dir] => 
        )

    [2] => Array
        (
            [name] => uploads
            [path] => /home/evilfox9e6vqi3lnf6ozx/wwwroot/uploads
            [relative_path] => /uploads
            [is_dir] => 1
        )

    [3] => Array
        (
            [name] => favicon.ico
            [path] => /home/evilfox9e6vqi3lnf6ozx/wwwroot/favicon.ico
            [relative_path] => /favicon.ico
            [is_dir] => 
        )

)