Passed
Push — master ( 47232b...207a99 )
by Bjørn
01:36 queued 12s
created

PhpIniSizes   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 66.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 55
ccs 10
cts 15
cp 0.6667
rs 10
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A parseShortHandSize() 0 21 4
A getIniBytes() 0 7 3
1
<?php
2
3
namespace WebPConvert\Convert\Helpers;
4
5
/**
6
 * Get/parse shorthandsize strings from php.ini as bytes.
7
 *
8
 * Parse strings like "1k" into bytes (1024).
9
 *
10
 * @package    WebPConvert
11
 * @author     Bjørn Rosell <[email protected]>
12
 * @since      Class available since Release 2.0.0
13
 */
14
class PhpIniSizes
15
{
16
17
    /**
18
     * Parse a shordhandsize string as the ones returned by ini_get()
19
     *
20
     * Parse a shorthandsize string having the syntax allowed in php.ini and returned by ini_get().
21
     * Ie "1K" => 1024.
22
     * Strings without units are also accepted.
23
     * The shorthandbytes syntax is described here: https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
24
     *
25
     * @param  string  $shortHandSize  A size string of the type returned by ini_get()
26
     * @return float|false  The parsed size (beware: it is float, do not check high numbers for equality),
27
     *                      or false if parse error
28
     */
29 1
    public static function parseShortHandSize($shortHandSize)
30
    {
31
32 1
        $result = preg_match("#^\\s*(\\d+(?:\\.\\d+)?)([bkmgtpezy]?)\\s*$#i", $shortHandSize, $matches);
33 1
        if ($result !== 1) {
34 1
            return false;
35
        }
36
37
        // Truncate, because that is what php does.
38 1
        $digitsValue = floor($matches[1]);
39
40 1
        if ((count($matches) >= 3) && ($matches[2] != '')) {
41 1
            $unit = $matches[2];
42
43
            // Find the position of the unit in the ordered string which is the power
44
            // of magnitude to multiply a kilobyte by.
45 1
            $position = stripos('bkmgtpezy', $unit);
46
47 1
            return floatval($digitsValue * pow(1024, $position));
48
        } else {
49 1
            return $digitsValue;
50
        }
51
    }
52
53
    /*
54
    * Get the size of an php.ini option.
55
    *
56
    * Calls ini_get() and parses the size to a number.
57
    * If the configuration option is null, does not exist, or cannot be parsed as a shorthandsize, false is returned
58
    *
59
    * @param  string  $varname  The configuration option name.
60
    * @return float|false  The parsed size or false if the configuration option does not exist
61
    */
62
    public static function getIniBytes($iniVarName)
63
    {
64
        $iniVarValue = ini_get($iniVarName);
65
        if (($iniVarValue == '') || $iniVarValue === false) {
66
            return false;
67
        }
68
        return self::parseShortHandSize($iniVarValue);
69
    }
70
}
71