2022-01-11 00:06:43 +00:00
|
|
|
|
<?
|
|
|
|
|
/**
|
|
|
|
|
* Простой класс для получения данных о пространстве на диске, разделе, в директории
|
|
|
|
|
* Может работать некорректно на 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
|
|
|
|
|
)
|
2022-01-11 00:11:08 +00:00
|
|
|
|
*/
|