Passed
Push — develop ( c09191...4b5082 )
by nguereza
02:18
created

Unit   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 39
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A sizeInBytes() 0 10 2
A formatSize() 0 13 3
1
<?php
2
3
/**
4
 * Platine Stdlib
5
 *
6
 * Platine Stdlib is a the collection of frequently used php features
7
 *
8
 * This content is released under the MIT License (MIT)
9
 *
10
 * Copyright (c) 2020 Platine Stdlib
11
 *
12
 * Permission is hereby granted, free of charge, to any person obtaining a copy
13
 * of this software and associated documentation files (the "Software"), to deal
14
 * in the Software without restriction, including without limitation the rights
15
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
 * copies of the Software, and to permit persons to whom the Software is
17
 * furnished to do so, subject to the following conditions:
18
 *
19
 * The above copyright notice and this permission notice shall be included in all
20
 * copies or substantial portions of the Software.
21
 *
22
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
 * SOFTWARE.
29
 */
30
31
/**
32
 *  @file Unit.php
33
 *
34
 *  The Unit helper class
35
 *
36
 *  @package    Platine\Stdlib\Helper
37
 *  @author Platine Developers Team
38
 *  @copyright  Copyright (c) 2020
39
 *  @license    http://opensource.org/licenses/MIT  MIT License
40
 *  @link   http://www.iacademy.cf
41
 *  @version 1.0.0
42
 *  @filesource
43
 */
44
45
declare(strict_types=1);
46
47
namespace Platine\Stdlib\Helper;
48
49
/**
50
 * Class Unit
51
 * @package Platine\Stdlib\Helper
52
 */
53
class Unit
54
{
55
56
    /**
57
     * Convert the size like 4G, 7T, 19B to byte
58
     * @param string $size
59
     * @return int
60
     */
61
    public static function sizeInBytes(string $size): int
62
    {
63
        $unit = 'B';
64
        $units = ['B' => 0, 'K' => 1, 'M' => 2, 'G' => 3, 'T' => 4];
65
        $matches = [];
66
        preg_match('/(?<size>[\d\.]+)\s*(?<unit>b|k|m|g|t)?/i', $size, $matches);
67
        if (array_key_exists('unit', $matches)) {
68
            $unit = strtoupper($matches['unit']);
69
        }
70
        return (int)(floatval($matches['size']) * pow(1024, $units[$unit]));
71
    }
72
73
    /**
74
     * Format to human readable size
75
     * @param int $size
76
     * @param int $precision
77
     * @return string
78
     */
79
    public static function formatSize(int $size, int $precision = 2): string
80
    {
81
        if ($size > 0) {
82
            $base = log($size) / log(1024);
83
            $suffixes = ['B', 'K', 'M', 'G', 'T'];
84
            $suffix = '';
85
            if (isset($suffixes[floor($base)])) {
86
                $suffix = $suffixes[floor($base)];
87
            }
88
            return round(pow(1024, $base - floor($base)), $precision) . $suffix;
89
        }
90
91
        return '';
92
    }
93
}
94