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 | } |