Функция 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, который позволяет учитывать вложенные папки и кэшировать результаты для повышения производительности.