DiskSpace.php
This commit is contained in:
parent
0256d7ae4f
commit
f0a88b3c96
97
php/DiskSpace.php
Normal file
97
php/DiskSpace.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?
|
||||
/**
|
||||
* Простой класс для получения данных о пространстве на диске, разделе, в директории
|
||||
* Может работать некорректно на 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
|
||||
)
|
||||
*/
|
Loading…
Reference in New Issue
Block a user