list_files()
云策文档标注
概述
list_files() 函数用于递归列出指定文件夹及其子目录中的所有文件,深度默认可达100层。该函数支持参数控制递归深度、排除项和是否包含隐藏文件。
关键要点
- 函数返回文件路径数组或失败时返回 false
- 参数包括 $folder(文件夹路径)、$levels(递归深度,默认100)、$exclusions(排除项数组)和 $include_hidden(是否包含隐藏文件)
- 递归处理子目录,跳过当前目录、上级目录、隐藏文件和排除项
- 空文件夹会以路径加斜杠形式返回,非空文件夹仅返回文件
代码示例
$upload_dir = wp_upload_dir();
$folder = $upload_dir['basedir'];
$files = list_files( $folder, 2 );
foreach ( $files as $file ) {
if ( is_file( $file ) ) {
$filesize = size_format( filesize( $file ) );
$filename = basename( $file );
}
echo esc_html( $filename . "-" . $filesize );
}注意事项
- 函数返回绝对路径,而非仅文件名
- 空文件夹会以路径加斜杠形式列出,非空文件夹仅列出文件
- 使用 trailingslashit() 确保路径末尾有斜杠
- 在 WordPress 6.3.0 版本添加了 $include_hidden 参数
原文内容
Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep.
Description
The depth of the recursiveness can be controlled by the $levels param.
Parameters
$folderstringoptional-
Full path to folder. Default empty.
$levelsintoptional-
Levels of folders to follow, Default 100 (PHP Loop limit).
Default:
100 $exclusionsstring[]optional-
List of folders and files to skip.
Default:
array() $include_hiddenbooloptional-
Whether to include details of hidden (“.” prefixed) files.
Default:
false
Source
function list_files( $folder = '', $levels = 100, $exclusions = array(), $include_hidden = false ) {
if ( empty( $folder ) ) {
return false;
}
$folder = trailingslashit( $folder );
if ( ! $levels ) {
return false;
}
$files = array();
$dir = @opendir( $folder );
if ( $dir ) {
while ( ( $file = readdir( $dir ) ) !== false ) {
// Skip current and parent folder links.
if ( in_array( $file, array( '.', '..' ), true ) ) {
continue;
}
// Skip hidden and excluded files.
if ( ( ! $include_hidden && '.' === $file[0] ) || in_array( $file, $exclusions, true ) ) {
continue;
}
if ( is_dir( $folder . $file ) ) {
$files2 = list_files( $folder . $file, $levels - 1, array(), $include_hidden );
if ( $files2 ) {
$files = array_merge( $files, $files2 );
} else {
$files[] = $folder . $file . '/';
}
} else {
$files[] = $folder . $file;
}
}
closedir( $dir );
}
return $files;
}
Skip to note 4 content
Sarankumar
Example for listing all files in the upload directory
$upload_dir = wp_upload_dir(); $folder = $upload_dir['basedir'] $files = list_files( $folder, 2 ); foreach ( $files as $file ) { if ( is_file( $file ) ) { $filesize = size_format( filesize( $file ) ); $filename = basename( $file ); } echo esc_html( $filename . "-" . $filesize ); }Skip to note 5 content
Philipp Stracker
This function returns a list of absolute paths (not file names!)
print_r( list_files( __DIR__ ) ); /* Output: Array ( [0] => /Users/philipp/Sites/public/dev-site/wp-content/plugins/test/test.php [1] => /Users/philipp/Sites/public/dev-site/wp-content/plugins/test/readme.txt [2] => /Users/philipp/Sites/public/dev-site/wp-content/plugins/test/license.txt ) */Skip to note 6 content
vee
Please note that this function seems to list only files but it is not.
Some folder is empty, it’s showing in the list. Some folder is not empty, it’s showing only files.
For example I have folders & files:
wp-content/my/a
wp-content/my/a/a.txt
wp-content/my/b
list_files()showing..wp-content/my/a/a.txt
wp-content/my/b/
Testing in WordPress 6.9-alpha-60636.