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