php获取目录文件夹下的内容,可用于读取目录文件,循环获取目录以及所有子目录中的所有文件。
/**
* 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组
* @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
)
)