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