循环获取目录以及所有子目录中的所有文件。
/** * 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组 * @param $dir * @return array */ function listDir($dir) { $files = []; if (!is_dir($dir)) { return $files; } foreach (scandir($dir) as &$file_name) { if ($file_name == '.' || $file_name == '..') { continue; } $files[$file_name] = [ 'file_name' => $file_name, 'abs_path' => $dir,//绝对地址 ]; if (is_dir($dir . DIRECTORY_SEPARATOR . $file_name)) { $files[$file_name] += [ 'is_dir' => 1, 'son' => listDir($dir . DIRECTORY_SEPARATOR . $file_name) ]; } else { $info = pathinfo($file_name); $files[$file_name] += [ 'is_dir' => 0, 'file_ext' => isset($info['extension']) ? strtolower($info['extension']) : '' ]; } } return $files; }
返回结果示例:
Array ( [1] => Array ( [file_name] => 1 [abs_path] => /var/www/test [is_dir] => 1 [son] => Array ( [2] => Array ( [file_name] => 2 [abs_path] => /var/www/test/1 [is_dir] => 1 [son] => Array ( [3.log] => Array ( [file_name] => 3.log [abs_path] => /var/www/test/1/2 [is_dir] => 0 [file_ext] => log ) ) ) [2.log] => Array ( [file_name] => 2.log [abs_path] => /var/www/test/1 [is_dir] => 0 [file_ext] => log ) ) ) [test.txt] => Array ( [file_name] => test.txt [abs_path] => /var/www/test [is_dir] => 0 [file_ext] => txt ) )
/** * 循环获取目录以及所有子目录中的所有文件,结果是一个二维数组 * @param $dir * @return array */ function listDir($dir) { static $files = []; if (!is_dir($dir)) { return $files; } foreach (scandir($dir) as &$file_name) { if ($file_name == '.' || $file_name == '..') { continue; } $files[$file_name] = [ 'file_name' => $file_name, 'abs_path' => $dir,//绝对地址 ]; if (is_dir($dir . DIRECTORY_SEPARATOR . $file_name)) { $files[$file_name] += [ 'is_dir' => 1, ]; listDir($dir . DIRECTORY_SEPARATOR . $file_name); } else { $info = pathinfo($file_name); $files[$file_name] += [ 'is_dir' => 0, 'file_ext' => isset($info['extension']) ? strtolower($info['extension']) : '' ]; } } return $files; }
返回结果示例:
Array ( [1] => Array ( [file_name] => 1 [abs_path] => /var/www/test [is_dir] => 1 ) [2] => Array ( [file_name] => 2 [abs_path] => /var/www/test/1 [is_dir] => 1 ) [3.log] => Array ( [file_name] => 3.log [abs_path] => /var/www/test/1/2 [is_dir] => 0 [file_ext] => log ) [2.log] => Array ( [file_name] => 2.log [abs_path] => /var/www/test/1 [is_dir] => 0 [file_ext] => log ) [test.txt] => Array ( [file_name] => test.txt [abs_path] => /var/www/test [is_dir] => 0 [file_ext] => txt ) )