Last active
August 7, 2020 15:23
Star
You must be signed in to star a gist
[PHP] Простой класс для получения данных о пространстве на диске
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
/** | |
* Простой класс для получения данных о пространстве на диске, разделе, в директории | |
* Может работать некорректно на shared-хостингах и при попытке получить данные | |
* о корневом разделе. | |
*/ | |
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 | |
) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment