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