Disk total space: примеры (PHP)

Использование disk_total_space для определения размера диска в PHP
Раздел: Работа с файловой системой
disk_total_space(string $directory): float|false
Основные сведения о функции disk_total_space()

Функция disk_total_space() в PHP возвращает общий размер файловой системы или раздела диска, указанного в аргументе. Она предоставляет информацию о полной емкости диска в байтах.

Назначение и использование

Функция используется для получения информации о дисковом пространстве в системном администрировании, мониторинге, утилитах очистки кэша или приложениях, работающих с файловыми хранилищами. Часто применяется вместе с функцией disk_free_space() для расчета занятого пространства.

Аргументы функции

Функция принимает один обязательный параметр:

  • directory (string) - путь к директории в файловой системе. На Windows можно передавать путь с указанием диска (например, "C:").

Функция возвращает общий размер дискового пространства в байтах в виде числа с плавающей точкой (float) или false в случае ошибки.

Базовые примеры использования
Получение размера диска на Unix-системах
<?
$total = disk_total_space('/');
echo 'Общий размер корневого раздела: ' . $total . ' байт';
?>
Общий размер корневого раздела: 107374182400 байт
Получение размера диска на Windows
<?
$total = disk_total_space('C:\\');
echo 'Раздел C: ' . $total . ' байт';
?>
Раздел C: 256060514304 байт
Обработка ошибки при несуществующем пути
<?
$result = disk_total_space('/несуществующий/путь');
var_dump($result);
?>
bool(false)
Альтернативные функции в PHP

Функция disk_free_space() возвращает объем свободного места на диске. Принимает те же аргументы. Часто используется в паре с disk_total_space() для вычисления занятого пространства.

statvfs() и posix системные вызовы

На Unix-системах можно использовать функцию statvfs(), которая возвращает массив с детальной статистикой файловой системы. Этот метод предоставляет больше информации, но является платформозависимым.

filesystem.php расширения

Для расширенной работы с файловыми системами существуют PECL-расширения вроде filesystem, предлагающие объектно-ориентированный интерфейс.

Распространенные ошибки
Некорректный путь к директории

Передача несуществующего пути приводит к возврату false и генерации предупреждения E_WARNING.

<?
$result = disk_total_space('/invalid_path');
// Вернет false и предупреждение
?>
Отсутствие прав доступа

При недостаточных правах доступа к указанной директории функция также возвращает false.

<?
$result = disk_total_space('/root');
var_dump($result);
?>
bool(false)
Ошибочная интерпретация результата на 32-битных системах

На 32-битных системах с большими дисками (>2TB) значение может быть некорректным из-за ограничений целочисленных типов. В PHP 8 это менее актуально, но стоит учитывать.

История изменений функции

Функция disk_total_space() присутствует в PHP начиная с версии 4.1.0. Существенных изменений в поведении функции в последних версиях PHP не было.

PHP 8.x

В PHP 8.0 и выше функция работает аналогично предыдущим версиям. Тип возвращаемого значения остался float. Улучшена внутренняя обработка ошибок, но интерфейс функции не изменился.

Расширенные примеры использования
Вычисление занятого пространства в процентах
Пример php
<?
function getDiskUsage($directory) {
    $total = disk_total_space($directory);
    $free = disk_free_space($directory);
    if ($total === false || $free === false) {
        return false;
    }
    $used = $total - $free;
    $percent = ($used / $total) * 100;
    return [
        'total' => $total,
        'used' => $used,
        'free' => $free,
        'percent' => round($percent, 2)
    ];
}
$usage = getDiskUsage('/');
if ($usage) {
    echo 'Использовано: ' . $usage['percent'] . '%';
}
?>
Использовано: 67.34%
Форматирование вывода в читаемый вид
Пример php
<?
function formatBytes($bytes, $precision = 2) {
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    $bytes /= pow(1024, $pow);
    return round($bytes, $precision) . ' ' . $units[$pow];
}
$total = disk_total_space('/home');
echo 'Объем раздела: ' . formatBytes($total);
?>
Объем раздела: 1.81 TB
Сравнение нескольких разделов
Пример php
<?
$partitions = ['/', '/home', '/var'];
foreach ($partitions as $partition) {
    $total = disk_total_space($partition);
    if ($total !== false) {
        echo $partition . ': ' . $total . ' байт
'; } } ?>
/: 107374182400 байт
/home: 214748364800 байт
/var: 53687091200 байт
Использование с реальным путем файла
Пример php
<?
$file = '/var/www/index.php';
$directory = dirname($file);
$totalSpace = disk_total_space($directory);
echo 'Раздел для файла: ' . $totalSpace . ' байт';
?>
Раздел для файла: 107374182400 байт
Аналоги в других языках программирования

Disk total space в Python

Модуль shutil.disk_usage() возвращает именованный кортеж с total, used и free значениями.

import shutil
total, used, free = shutil.disk_usage('/')
print(f'Total: {total} bytes')
Total: 107374182400 bytes
JavaScript (Node.js)

Модуль fs в Node.js предоставляет функцию statfs() (или асинхронную версию) для получения информации о файловой системе.

const fs = require('fs').promises;
async function getDiskSpace() {
    const stats = await fs.statfs('/');
    console.log('Total:', stats.bsize * stats.blocks);
}
getDiskSpace();
Total: 107374182400

Disk total space в MySQL

В MySQL нет прямой аналогии, но информацию о свободном месте на диске можно получить через системные таблицы INFORMATION_SCHEMA для таблиц или мониторинга файловой системы сервера.

PHP disk_total_space function comments

En
Disk total space Returns the total size of a filesystem or disk partition