Как получить список файлов внутри папки (включая подпапки) на PHP
Готовая PHP-функция, которая получает список всех файлов, находящихся в заданной папке. Также по умолчанию включаются файлы находящиеся во вложенных папках: параметр $recursive = true.
Результатом работы функции является массив со списком всех файлов (и папок если $include_folders = true).
/**
* Получает пути всех файлов и папок в указанной папке.
*
* @param string $dir Путь до папки (на конце со слэшем или без).
* @param bool $recursive Включить вложенные папки или нет?
* @param bool $include_folders Включить ли в список пути на папки?
*
* @return array Вернет массив путей до файлов/папок.
*/
function get_dir_files( $dir, $recursive = true, $include_folders = false ){
if( ! is_dir($dir) )
return array();
$files = array();
$dir = rtrim( $dir, '/\\' ); // удалим слэш на конце
foreach( glob( "$dir/{,.}[!.,!..]*", GLOB_BRACE ) as $file ){
if( is_dir( $file ) ){
if( $include_folders )
$files[] = $file;
if( $recursive )
$files = array_merge( $files, call_user_func( __FUNCTION__, $file, $recursive, $include_folders ) );
}
else
$files[] = $file;
}
return $files;
}
Использование:
$files = get_dir_files('/home/example.com/wp-includes/');
/*
Array
(
[0] => /home/example.com/wp-includes/ms-settings.php
[1] => /home/example.com/wp-includes/embed.php
[2] => /home/example.com/wp-includes/rest-api.php
[3] => /home/example.com/wp-includes/registration.php
[4] => /home/example.com/wp-includes/cron.php
...
*/
Старый вариант
/**
* Получает пути всех файлов в указанной папке, включая все вложенные уровни.
*
* @param $dir Путь до папки со слэшем на конце или без.
* @return Вернет массив путей до файлов.
*/
function get_dir_files( $dir ){
$filenames = array();
$dir = rtrim( $dir, '/' ); // удалим слэш на конце
if( is_dir($dir) ){
if( $handle = opendir($dir) ){
chdir( $dir );
while( false !== ($file = readdir($handle)) ){
if( $file != "." && $file != '..' ){
if( is_dir($file) ){
$arr = get_dir_files( $file );
foreach( $arr as $value ) $filenames[] = $dir .'/'. $value;
}
else {
$filenames[] = $dir .'/'. $file;
}
}
}
chdir('../');
}
closedir( $handle );
}
return $filenames;
}
$files = get_dir_files('/home/example.com/wp-includes/');
/*
Array
(
[0] => /home/example.com/wp-includes/ms-settings.php
[1] => /home/example.com/wp-includes/embed.php
[2] => /home/example.com/wp-includes/rest-api.php
[3] => /home/example.com/wp-includes/registration.php
[4] => /home/example.com/wp-includes/cron.php
...
*/—
Заметка встроена в: Полезные PHP код-сниппеты — для опытных