Disk total space: примеры (PHP)
disk_total_space(string $directory): float|falseФункция disk_total_space() в PHP возвращает общий размер файловой системы или раздела диска, указанного в аргументе. Она предоставляет информацию о полной емкости диска в байтах.
Функция используется для получения информации о дисковом пространстве в системном администрировании, мониторинге, утилитах очистки кэша или приложениях, работающих с файловыми хранилищами. Часто применяется вместе с функцией disk_free_space() для расчета занятого пространства.
Функция принимает один обязательный параметр:
- directory (string) - путь к директории в файловой системе. На Windows можно передавать путь с указанием диска (например, "C:").
Функция возвращает общий размер дискового пространства в байтах в виде числа с плавающей точкой (float) или false в случае ошибки.
<?
$total = disk_total_space('/');
echo 'Общий размер корневого раздела: ' . $total . ' байт';
?>Общий размер корневого раздела: 107374182400 байт
<?
$total = disk_total_space('C:\\');
echo 'Раздел C: ' . $total . ' байт';
?>Раздел C: 256060514304 байт
<?
$result = disk_total_space('/несуществующий/путь');
var_dump($result);
?>bool(false)
Функция disk_free_space() возвращает объем свободного места на диске. Принимает те же аргументы. Часто используется в паре с disk_total_space() для вычисления занятого пространства.
На Unix-системах можно использовать функцию statvfs(), которая возвращает массив с детальной статистикой файловой системы. Этот метод предоставляет больше информации, но является платформозависимым.
Для расширенной работы с файловыми системами существуют PECL-расширения вроде filesystem, предлагающие объектно-ориентированный интерфейс.
Передача несуществующего пути приводит к возврату false и генерации предупреждения E_WARNING.
<?
$result = disk_total_space('/invalid_path');
// Вернет false и предупреждение
?>При недостаточных правах доступа к указанной директории функция также возвращает false.
<?
$result = disk_total_space('/root');
var_dump($result);
?>bool(false)
На 32-битных системах с большими дисками (>2TB) значение может быть некорректным из-за ограничений целочисленных типов. В PHP 8 это менее актуально, но стоит учитывать.
Функция disk_total_space() присутствует в PHP начиная с версии 4.1.0. Существенных изменений в поведении функции в последних версиях PHP не было.
В PHP 8.0 и выше функция работает аналогично предыдущим версиям. Тип возвращаемого значения остался float. Улучшена внутренняя обработка ошибок, но интерфейс функции не изменился.
<?
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%
<?
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
<?
$partitions = ['/', '/home', '/var'];
foreach ($partitions as $partition) {
$total = disk_total_space($partition);
if ($total !== false) {
echo $partition . ': ' . $total . ' байт
';
}
}
?>/: 107374182400 байт
/home: 214748364800 байт
/var: 53687091200 байт
<?
$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
Модуль 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 для таблиц или мониторинга файловой системы сервера.