disk_total_space()
Функция disk_total_space() в PHP возвращает общий размер файловой системы или раздела диска в байтах. Незаменима для мониторинга дискового пространства.
Введение в функцию PHP disk_total_space()
Функция disk_total_space() в PHP возвращает общий размер файловой системы (или раздела диска), содержащей указанный каталог, в байтах. Она не измеряет размер самого каталога — она сообщает ёмкость соответствующего тома. Это делает её полезной для администраторов серверов и веб-разработчиков, которым нужно отслеживать ёмкость диска, создавать панели управления хранилищем или предупреждать пользователей перед тем, как загружаемые файлы заполнят раздел.
Важный момент, который часто сбивает с толку новичков: аргументом является любой путь на томе, а не узел устройства тома. Передача /var/www, /home/user или просто / вернёт общий размер того раздела, на котором находится указанный путь. Чтобы узнать, сколько свободного места ещё доступно, используйте эту функцию вместе с disk_free_space() — disk_total_space() возвращает ёмкость, а disk_free_space() — незанятую часть.
На этой странице рассматриваются синтаксис, параметры, возвращаемое значение и практические примеры, в том числе как перевести сырые байты в удобочитаемый формат и как вычислить процент использованного дискового пространства.
Синтаксис
Синтаксис функции disk_total_space() выглядит следующим образом:
Синтаксис PHP disk_total_space()
disk_total_space(string $directory): float|falseПараметры
Функция disk_total_space() принимает один обязательный параметр:
$directory: Путь, расположенный на файловой системе, которую требуется проверить. Подойдёт любой допустимый путь на томе — функция определит раздел, которому он принадлежит. В Windows используйте букву диска с завершающим слешем, напримерC:\илиC:/.
Возвращаемое значение
Функция возвращает общее количество байт на файловой системе в виде значения типа float (используется float, поскольку размер томов может превышать диапазон 32-битного целого числа). В случае ошибки — например, при указании несуществующего пути или при недостатке прав доступа — функция возвращает false. Поскольку допустимый размер диска теоретически может совпадать со значением, которое PHP воспринимает как ложное, всегда проверяйте результат с помощью строгого сравнения !== false, а не проверки истинности.
Примеры
Вот несколько примеров использования функции disk_total_space():
Пример 1: Получение общего размера файловой системы
В следующем примере получается общий размер файловой системы /home/:
Получение общего размера файловой системы в PHP
echo disk_total_space("/home/");В результате выполнения этого примера будет выведен общий размер файловой системы в байтах.
Пример 2: Получение общего размера раздела диска
В следующем примере получается общий размер раздела диска /dev/sda1:
Получение общего размера раздела диска в PHP
echo disk_total_space("/dev/sda1");В результате выполнения этого примера будет выведен общий размер раздела диска в байтах.
Пример 3: Преобразование байт в удобочитаемый формат
Функция возвращает сырые байты, которые сложно воспринимать. Преобразуйте результат в гигабайты и отформатируйте его с помощью number_format():
Преобразование размера диска в удобочитаемый формат в PHP
$bytes = disk_total_space("/");
if ($bytes !== false) {
echo number_format($bytes / 1024 / 1024 / 1024, 2) . " GB";
}
// e.g. "465.76 GB"Для единицы, масштабирующейся автоматически (KB, MB, GB, TB, …), используйте небольшой вспомогательный обработчик:
Автомасштабирующий форматировщик байт в PHP
function formatBytes(float $bytes, int $precision = 2): string {
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
$pow = $bytes > 0 ? floor(log($bytes, 1024)) : 0;
$pow = min($pow, count($units) - 1);
$bytes /= (1024 ** $pow);
return round($bytes, $precision) . ' ' . $units[$pow];
}
echo formatBytes(disk_total_space("/")); // e.g. "465.76 GB"Пример 4: Вычисление процента использованного дискового пространства
Объедините disk_total_space() с disk_free_space(), чтобы отобразить степень заполненности тома — это удобно для предупреждений и скриптов мониторинга:
Вычисление процента использованного дискового пространства в PHP
$total = disk_total_space("/");
$free = disk_free_space("/");
if ($total !== false && $free !== false) {
$usedPercent = round(($total - $free) / $total * 100, 1);
echo "Disk used: {$usedPercent}%";
}Замечания и подводные камни
- Функция измеряет том, а не каталог. Чтобы получить размер содержимого папки, суммируйте размеры её файлов (например, с помощью
filesize()при переборе файлов), а не используйтеdisk_total_space(). - Всегда проверяйте на
false. Несуществующий путь, отключённый диск или недостаточные права доступа приводят к ошибке вызова; используйте!== false. - open_basedir / безопасные пути. Если активны ограничения
open_basedir, путь должен находиться в разрешённом каталоге, иначе вызов завершится ошибкой. - Связанная функция.
disk_free_space()(и её псевдонимdiskfreespace()) возвращает доступное пространство на том же томе.
Заключение
Функция disk_total_space() сообщает общую ёмкость файловой системы, содержащей указанный путь, в байтах. В сочетании с disk_free_space() она позволяет создавать панели управления хранилищем, устанавливать ограничения на загрузку файлов и запускать предупреждения о нехватке места. Запомните три ключевых правила: передавайте любой путь на целевом томе, воспринимайте возвращаемое значение как float и защищайтесь от ошибок с помощью строгой проверки !== false.