W3docs

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() принимает один обязательный параметр:

  1. $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.

Практика

Практика
Какое утверждение точно описывает функцию disk_total_space() в PHP?
Какое утверждение точно описывает функцию disk_total_space() в PHP?
Was this page helpful?