增强文件体积计算util
修复已知错误 *更多容量单位 *解决限制容量为0时的错误 *新增转换输入容量字符串到MB单位以实现容量限制自定义值
This commit is contained in:
parent
4082e75c45
commit
9bedcd0d08
@ -121,7 +121,7 @@ class FileSizeHelper
|
|||||||
*/
|
*/
|
||||||
public static function formatBytes($bytes, $precision = 2): string
|
public static function formatBytes($bytes, $precision = 2): string
|
||||||
{
|
{
|
||||||
$units = array('B', 'KB', 'MB', 'GB', 'TB');
|
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
|
||||||
|
|
||||||
$bytes = max($bytes, 0);
|
$bytes = max($bytes, 0);
|
||||||
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
|
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
|
||||||
@ -164,6 +164,46 @@ class FileSizeHelper
|
|||||||
return '∞';
|
return '∞';
|
||||||
}
|
}
|
||||||
$userAllDirSize = self::getUserAllDirSize($user_id);
|
$userAllDirSize = self::getUserAllDirSize($user_id);
|
||||||
|
if($limit== 0) {
|
||||||
|
return 'invalid %';
|
||||||
|
}
|
||||||
return round($userAllDirSize / $limit * 100, 2) . ' %';
|
return round($userAllDirSize / $limit * 100, 2) . ' %';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据输入的限制转换为MB
|
||||||
|
* 支持带单位的输入
|
||||||
|
* return -1无限,-2不能为空,-3格式错误
|
||||||
|
* ignore bit
|
||||||
|
* @param string $input_limit
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function getConvertedLimit(string $input_limit): int
|
||||||
|
{
|
||||||
|
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
|
||||||
|
$input_limit = str_replace(' ', '', strtoupper($input_limit));
|
||||||
|
if (strlen($input_limit) === 0) { // error
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
if ($input_limit === '-1' || $input_limit === '∞') { // unlimited
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$unitLength = is_numeric(substr($input_limit, -2, 1)) ? 1 : 2;
|
||||||
|
$unit = substr($input_limit, -$unitLength);
|
||||||
|
if (!in_array($unit, $units)) {
|
||||||
|
return -3; // unknown unit
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = substr($input_limit, 0, -$unitLength);
|
||||||
|
if (!is_numeric($value)) {
|
||||||
|
return -3; // invalid format
|
||||||
|
}
|
||||||
|
|
||||||
|
$unitIndex = array_search($unit, $units);
|
||||||
|
$valueInBytes = $value * pow(1024, $unitIndex);
|
||||||
|
$valueInMB = $valueInBytes / pow(1024, 2); // convert to MB
|
||||||
|
|
||||||
|
return max(0, (int)$valueInMB);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user