Функция get_dirsize()
в WordPress возвращает размер указанной директории (папки) в байтах. Это полезно для контроля объема хранимых файлов, особенно в мультисайтовой сети, где ограничивается место на загрузку для каждого сайта.
get_dirsize( string $directory, int $max_execution_time = null ): int|false|null
Параметры:
$directory
(строка, обязательный) — полный путь к директории.$max_execution_time
(число, необязательный) — максимальное время выполнения, в секундах. По умолчанию —null
, при этом используетсяini_get('max_execution_time')
.
Возвращаемое значение:
int
— размер каталога в байтах.false
— если директория не существует.null
— если выполнение функции превысило заданное время.
Примечание: get_dirsize()
— это мультисайтовая функция. В односайтовой установке ее нужно подключить вручную, добавив require_once ABSPATH . WPINC . '/ms-functions.php';
.
Пример 1. Получение размера директории uploads
Этот пример показывает, как получить размер каталога uploads
и вывести его в мегабайтах.
// Подключаем функцию в односайтовой установке
if ( ! function_exists( 'get_dirsize' ) ) {
require_once ABSPATH . WPINC . '/ms-functions.php';
}
// Получаем путь к директории uploads
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
// Получаем размер директории uploads
$size_bytes = get_dirsize( $upload_path );
// Выводим размер в мегабайтах
if ( $size_bytes !== false ) {
echo 'Размер каталога uploads: ' . number_format( $size_bytes / ( 1024 * 1024 ), 2 ) . ' MB';
} else {
echo 'Каталог не найден.';
}
Пример 2. Проверка, превышает ли каталог заданный размер
Допустим, нужно проверить, превышает ли размер каталога uploads
100 MB, и уведомить администратора в случае превышения.
// Подключаем функцию для односайтовой установки
if ( ! function_exists( 'get_dirsize' ) ) {
require_once ABSPATH . WPINC . '/ms-functions.php';
}
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
$max_size = 100 * 1024 * 1024; // 100 MB в байтах
$size_bytes = get_dirsize( $upload_path );
if ( $size_bytes !== false && $size_bytes > $max_size ) {
echo 'Внимание! Размер каталога uploads превышает 100 MB!';
} else {
echo 'Размер каталога uploads в пределах нормы.';
}
Пример 3. Установка ограниченного времени выполнения для проверки размера каталога
Этот пример демонстрирует, как задать максимальное время выполнения функции, например, если проверка больших каталогов вызывает тайм-аут.
// Подключаем функцию в обычной установке
if ( ! function_exists( 'get_dirsize' ) ) {
require_once ABSPATH . WPINC . '/ms-functions.php';
}
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
$timeout = 5; // максимальное время выполнения — 5 секунд
$size_bytes = get_dirsize( $upload_path, $timeout );
if ( $size_bytes === null ) {
echo 'Превышено время выполнения функции.';
} elseif ( $size_bytes !== false ) {
echo 'Размер каталога uploads: ' . number_format( $size_bytes / ( 1024 * 1024 ), 2 ) . ' MB';
} else {
echo 'Каталог не найден.';
}
Пример 4. Получение размера кастомной директории
Этот пример покажет, как получить размер произвольного каталога, например, /wp-content/themes
.
// Подключаем функцию в односайтовой установке
if ( ! function_exists( 'get_dirsize' ) ) {
require_once ABSPATH . WPINC . '/ms-functions.php';
}
$theme_dir = WP_CONTENT_DIR . '/themes';
$size_bytes = get_dirsize( $theme_dir );
echo $size_bytes !== false
? 'Размер каталога тем: ' . number_format( $size_bytes / ( 1024 * 1024 ), 2 ) . ' MB'
: 'Каталог тем не найден.';
Заключение
Функция get_dirsize()
— мощный инструмент для получения размера директории и контроля использования пространства на сервере в мультисайтовой установке WordPress. Она облегчает мониторинг заполнения каталогов и управление квотами на загрузку файлов.