Функция recurse_dirsize()
в WordPress используется для вычисления полного размера указанного каталога, включая вложенные папки и файлы. Она может быть полезна, например, при расчете занимаемого места папкой загрузок.
recurse_dirsize( string $directory, string|string[] $exclude = null, int $max_execution_time = null, array $directory_cache = null ): int|false|null
Параметры:
$directory
(string) — полный путь к директории, размер которой необходимо узнать.$exclude
(string|string[]) — путь к подкаталогу (или массив путей), которые нужно исключить из расчета. По умолчанию:null
.$max_execution_time
(int) — максимальное время выполнения функции в секундах. По умолчанию: значение параметраmax_execution_time
в настройках PHP.$directory_cache
(array) — массив кэшированных данных о размере каталогов. В версии WP 5.6 и выше это значение сохраняется в транситентеdirsize_cache
.
Возвращаемое значение:
int
— размер каталога в байтах.false
— если каталог не существует.null
— если время выполнения функции превысило заданное ограничение.
Важные аспекты
- Функция рекурсивно обходит все файлы и вложенные папки, суммируя их размер.
- Кэширование результатов расчета позволяет оптимизировать производительность при повторных вызовах.
- Если указать подкаталоги для исключения через параметр
$exclude
, их размер не будет учтен в общем расчете.
Пример 1. Расчет размера каталога uploads
В данном примере мы рассчитываем общий размер папки uploads
(где WordPress хранит загруженные медиафайлы). Мы также выводим результат в мегабайтах.
// Подключаем необходимые функции
require_once ABSPATH . WPINC . '/functions.php';
// Получаем путь к папке загрузок
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
// Расчет размера каталога
$size_in_bytes = recurse_dirsize( $upload_path );
// Преобразуем в мегабайты и выводим
if ( $size_in_bytes !== false ) {
echo 'Размер папки uploads: ' . number_format( $size_in_bytes / (1024 * 1024), 2 ) . ' MB';
} else {
echo 'Каталог не существует';
}
Пример 2. Исключение подкаталогов из расчета
Допустим, нам нужно рассчитать размер папки wp-content
без учета папки plugins
, чтобы узнать, сколько места занимают файлы темы и медиа.
// Подключаем необходимые функции
require_once ABSPATH . WPINC . '/functions.php';
$wp_content_path = ABSPATH . 'wp-content';
// Указываем подкаталог для исключения
$exclude_dirs = [ $wp_content_path . '/plugins' ];
// Выполняем расчет
$total_size = recurse_dirsize( $wp_content_path, $exclude_dirs );
// Преобразуем в мегабайты и выводим
if ( $total_size !== false ) {
echo 'Размер wp-content без папки plugins: ' . number_format( $total_size / (1024 * 1024), 2 ) . ' MB';
} else {
echo 'Каталог не найден';
}
Пример 3. Установка ограничения времени выполнения
Если требуется рассчитать размер очень большого каталога, можно ограничить максимальное время выполнения. Например, мы хотим узнать размер папки uploads
, но не допускаем, чтобы операция заняла больше 10 секунд.
// Подключаем необходимые функции
require_once ABSPATH . WPINC . '/functions.php';
$uploads_path = wp_upload_dir()['basedir'];
$max_time = 10; // Ограничение в 10 секунд
$size = recurse_dirsize( $uploads_path, null, $max_time );
if ( $size === null ) {
echo 'Время выполнения функции истекло';
} elseif ( $size !== false ) {
echo 'Размер папки uploads: ' . number_format( $size / (1024 * 1024), 2 ) . ' MB';
} else {
echo 'Каталог не найден';
}
Пример 4. Использование кэша для повышения производительности
Если нам нужно часто проверять размер одного и того же каталога, можем кэшировать результаты в массиве и передавать его в параметре $directory_cache
.
// Подключаем необходимые функции
require_once ABSPATH . WPINC . '/functions.php';
$cache = [];
$uploads_dir = wp_upload_dir()['basedir'];
// Сначала выполняем расчет с кэшированием
$initial_size = recurse_dirsize( $uploads_dir, null, null, $cache );
// Повторный вызов с тем же кэшем будет быстрее
$recalculated_size = recurse_dirsize( $uploads_dir, null, null, $cache );
echo 'Размер папки uploads с кэшем: ' . number_format( $recalculated_size / (1024 * 1024), 2 ) . ' MB';
Заключение
Функция recurse_dirsize()
— удобный инструмент для расчета размера каталога в WordPress, который позволяет учитывать вложенные папки и кэшировать результаты для повышения производительности.