Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
92.31% |
12 / 13 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
PhpIniSizes | |
92.31% |
12 / 13 |
|
50.00% |
1 / 2 |
7.02 | |
0.00% |
0 / 1 |
parseShortHandSize | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
4 | |||
getIniBytes | |
75.00% |
3 / 4 |
|
0.00% |
0 / 1 |
3.14 |
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 <it@rosell.dk> |
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 | public static function parseShortHandSize($shortHandSize) |
30 | { |
31 | |
32 | $result = preg_match("#^\\s*(\\d+(?:\\.\\d+)?)([bkmgtpezy]?)\\s*$#i", $shortHandSize, $matches); |
33 | if ($result !== 1) { |
34 | return false; |
35 | } |
36 | |
37 | // Truncate, because that is what php does. |
38 | $digitsValue = floor($matches[1]); |
39 | |
40 | if ((count($matches) >= 3) && ($matches[2] != '')) { |
41 | $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 | $position = stripos('bkmgtpezy', $unit); |
46 | |
47 | return floatval($digitsValue * pow(1024, $position)); |
48 | } else { |
49 | 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 | } |