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

Работа с функцией disk_free_space в PHP на примерах
Раздел: Работа с файловой системой
disk_free_space(string $directory): float|false

Основные сведения

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

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

  • directory (string|null) - путь к директории на проверяемом разделе диска. Если передан null или аргумент опущен, функция использует текущую директорию скрипта.

Возвращаемое значение — число типа float, представляющее количество свободных байтов. В случае возникновения ошибки (например, если указанный путь не существует) возвращается false.

Простые примеры

Пример с указанием конкретного пути:

<?
$free = disk_free_space('/home');
var_dump($free);
?>
float(1234567890.5)

Использование без аргумента (текущая директория):

<?
$free = disk_free_space();
echo $free;
?>
9876543210

Обработка некорректного пути:

<?
$free = disk_free_space('/несуществующий/путь');
var_dump($free);
?>
bool(false)
Аналоги в PHP
  • disk_total_space(?string $directory): float|false — возвращает общий размер раздела диска. Обычно используется вместе с disk_free_space для вычисления занятого пространства или процента заполнения.
  • sys_get_temp_dir(): string — возвращает путь к директории для временных файлов. Может быть полезен для проверки свободного места в системной временной папке.

Функция disk_total_space предпочтительнее, когда требуется анализировать общую статистику использования диска, а не только свободное место.

Распространенные ошибки

1. Неправильная интерпретация возвращаемого значения при ошибке. Следует всегда проверять, что результат не равен false.

<?
$free = disk_free_space('/неверный путь');
if ($free === false) {
    echo 'Ошибка получения информации о диске.';
} else {
    echo 'Свободно: ' . $free . ' байт';
}
?>
Ошибка получения информации о диске.

2. Отсутствие прав на чтение указанной директории. Функция также вернет false.

<?
// Предположим, у скрипта нет прав на доступ к /root
$free = disk_free_space('/root');
var_dump($free);
?>
bool(false)
История изменений

В PHP 8.0 значительных изменений в поведении функции не было. Стоит отметить, что начиная с версии PHP 7.0, функция может быть вызвана без аргументов, что эквивалентно передаче null. В более ранних версиях требовалось обязательно указывать путь.

Расширенные примеры

Вычисление процента свободного места на диске:

Пример php
<?
$path = '/';
$total = disk_total_space($path);
$free = disk_free_space($path);
if ($total !== false && $free !== false) {
    $used = $total - $free;
    $percentFree = round(($free / $total) * 100, 2);
    echo 'Всего: ' . formatBytes($total) . '\n';
    echo 'Свободно: ' . formatBytes($free) . ' (' . $percentFree . '%)';
}
function formatBytes($bytes) {
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $i = 0;
    while ($bytes >= 1024 && $i < count($units) - 1) {
        $bytes /= 1024;
        $i++;
    }
    return round($bytes, 2) . ' ' . $units[$i];
}
?>
Всего: 500 GB
Свободно: 150 GB (30%)

Сравнение свободного места на нескольких разделах:

Пример php
<?
$partitions = ['/', '/home', '/var'];
foreach ($partitions as $partition) {
    $free = disk_free_space($partition);
    if ($free !== false) {
        echo $partition . ': ' . formatBytes($free) . '\n';
    }
}
?>
/: 15.5 GB
/home: 102.3 GB
/var: 2.1 GB

Проверка перед записью большого файла:

Пример php
<?
$requiredSpace = 500 * 1024 * 1024; // 500 MB в байтах
$uploadDir = '/uploads';
$free = disk_free_space($uploadDir);
if ($free !== false && $free > $requiredSpace) {
    echo 'Места достаточно для загрузки.';
} else {
    echo 'Недостаточно свободного места.';
}
?>
Места достаточно для загрузки.
Аналоги в других языках
Python

Используется модуль os или shutil:

import os
stat = os.statvfs('/home')
free = stat.f_frsize * stat.f_bavail
print(free)
1234567890

В отличие от PHP, Python возвращает результат в виде целого числа и требует дополнительных вычислений.

JavaScript (Node.js)

Применяется модуль fs:

const fs = require('fs');
fs.statfs('/', (err, stats) => {
  if (err) throw err;
  console.log(stats.bavail * stats.bsize);
});
1234567890

Функция асинхронная, что является ключевым отличием от синхронного вызова в PHP.

MySQL

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

PHP disk_free_space function comments

En
Disk free space Returns available space on filesystem or disk partition