gists/php/DiskSpace.php

99 lines
3.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?
/**
* Простой класс для получения данных о пространстве на диске, разделе, в директории
* Может работать некорректно на shared-хостингах и при попытке получить данные
* о корневом разделе.
*
* @see https://gist.github.com/anthonyaxenov/5db7be8b514f30ab2658150f2c018740
*/
class DiskSpace
{
/**
* Возвращает размер свободного пространства в байтах
*
* @see https://www.php.net/manual/ru/function.disk-free-space.php
* @param string $path Директория или раздел диска
* @return float Размер свободного пространства в байтах
*/
public static function getFree($path)
{
return disk_free_space($path);
}
/**
* Возвращает общий размер
*
* @see https://www.php.net/manual/ru/function.disk-total-space.php
* @param string $path Директория или раздел диска
* @return float Общий размер в байтах
*/
public static function getTotal($path)
{
return disk_total_space($path);
}
/**
* Возвращает размер занятого пространства в байтах
*
* @param string $path Директория или раздел диска
* @return float Размер занятого пространства в байтах
*/
public static function getOccupied($path)
{
return self::getTotal($path) - self::getFree($path);
}
/**
* Возвращает округлённый размер с единицей измерения (Кб, Мб и т.д.)
*
* @see https://www.php.net/manual/ru/function.disk-total-space.php#75971
* @param float $bytes Количество байт
* @return string Форматированная строка
*/
private static function format($bytes)
{
$symbols = ['Б', 'Кб', 'Мб', 'Гб', 'Тб', 'Пб', 'Эб', 'Зб', 'Йб'];
$exp = floor(log($bytes) / log(1024));
return sprintf('%.2f ' . $symbols[$exp], ($bytes / pow(1024, floor($exp))));
}
/**
* Возвращает все данные о пространстве
*
* @param string $path Директория или раздел диска
* @return array Информация о пространстве
*/
public static function get($path)
{
$free_bytes = self::getFree($path);
$total_bytes = self::getTotal($path);
$occ_bytes = self::getOccupied($path);
return [
'free' => self::format($free_bytes),
'free_bytes' => $free_bytes,
'occupied' => self::format($occ_bytes),
'occupied_bytes' => $occ_bytes,
'total' => self::format($total_bytes),
'total_bytes' => $total_bytes,
];
}
}
// Использование:
$path = $_SERVER['DOCUMENT_ROOT'];
$info = DiskSpace::get($path);
print_r($info);
/* Результат:
Array
(
[free] => 67.17 Гб
[free_bytes] => 72120483840
[occupied] => 1.39 Тб
[occupied_bytes] => 1528753938432
[total] => 1.46 Тб
[total_bytes] => 1600874422272
)
*/