LIST_FILES() │ WP 2.6.0
Функция list_files()
возвращает список всех файлов в указанной папке и во всех подкаталогах до 100 уровней глубины. Глубину поиска можно настроить с помощью параметра $levels
.
Обратите внимание: В данной функции нет хуков (hook).
Возвращаемое значение
Функция возвращает массив строк с путями к файлам в случае успеха или false
, если произошла ошибка.
Использование
Функция вызывается следующим образом:
list_files( $folder, $levels, $exclusions, $include_hidden );
Параметры
- $folder (string) — Полный путь к папке. По умолчанию:
''
- $levels (int) — Количество уровней подкаталогов для поиска. По умолчанию:
100
- $exclusions (array) — Список папок и файлов, которые нужно пропустить. По умолчанию:
array()
- $include_hidden (bool) — Включать ли скрытые файлы (файлы, начинающиеся на "."). По умолчанию:
false
Примеры использования
Пример 1: Получение всех файлов в директории
Пример того, как работает функция. Давайте получим все файлы WordPress.
// Подключаем файл для работы с файлами
// require_once ABSPATH . 'wp-admin/includes/file.php';
$files = list_files( ABSPATH );
print_r( $files );
/*
Результат может выглядеть так:
Array
(
[0] => /home/t/public_html/xmlrpc.php
[1] => /home/t/public_html/wp-mail.php
[2] => /home/t/public_html/wp-includes/ms-settings.php
...
[991] => /home/t/public_html/wp-admin/css/colors/sunrise/colors.css
)
*/
Пример 2: Получение файлов с ограничением по подкаталогам
// require_once ABSPATH . 'wp-admin/includes/file.php';
$files = list_files( ABSPATH, 1 );
print_r( $files );
/*
Результат может выглядеть так:
Array
(
[0] => /home/t/public_html/xmlrpc.php
[1] => /home/t/public_html/wp-mail.php
[2] => /home/t/public_html/wp-includes/
[3] => /home/t/public_html/wp-settings.php
[4] => /home/t/public_html/wp-config-sample.php
[5] => /home/t/public_html/wp-comments-post.php
...
)
*/
Обратите внимание: В этом примере мы получили не только файлы, но и названия подкаталогов.
Пример 3: Получение всех файлов в директории загрузок
// require_once ABSPATH . 'wp-admin/includes/file.php';
$folder = wp_upload_dir()['basedir'];
$files = list_files( $folder, 3 );
foreach ( $files as $file ) {
if ( is_file( $file ) ) {
$filesize = size_format( filesize( $file ));
echo esc_html( "$file - $filesize" ) . "n";
}
}
/*
Результат может выглядеть так:
"/home/wp-kama.com/www/wp-content/uploads/2022/03/clipboard-image-886236.png - 4 KB"
"/home/wp-kama.com/www/wp-content/uploads/2022/03/clipboard-image-99186-120x120.png - 2 KB"
...
*/
Код функции
Вот код самой функции list_files()
:
function list_files( $folder = '', $levels = 100, $exclusions = array(), $include_hidden = false ) {
if ( empty( $folder ) ) {
return false; // Если папка пуста, возвращаем false
}
$folder = trailingslashit( $folder ); // Добавляем слеш в конце пути
if ( ! $levels ) {
return false; // Если уровень поиска равен 0, возвращаем false
}
$files = array(); // Массив для хранения найденных файлов
$dir = @opendir( $folder ); // Открываем директорию
if ( $dir ) {
while ( ( $file = readdir( $dir ) ) !== false ) {
// Пропускаем текущую и родительскую директории
if ( in_array( $file, array( '.', '..' ), true ) ) {
continue;
}
// Пропускаем скрытые и исключенные файлы
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; // Возвращаем массив с найденными файлами
}
Изменения
- С версии 2.6.0 — функция была добавлена.
- С версии 4.9.0 — добавлен параметр
$exclusions
. - С версии 6.3.0 — добавлен параметр
$include_hidden
.
Теперь вы знаете, как пользоваться функцией list_files()
в WordPress. Вы сможете легко получать список файлов из директории и управлять ими в соответствии с вашими нуждами.