Как получить список файлов внутри папки (включая подпапки) на 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 коды — для опытных