gists/php/DiskSpace.php
2022-01-11 08:06:43 +08:00

97 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
/**
* Простой класс для получения данных о пространстве на диске, разделе, в директории
* Может работать некорректно на shared-хостингах и при попытке получить данные
* о корневом разделе.
* 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
)
*/