我需要测试由ini_get(‘memory_limit’)返回的值,如果它低于某个阈值,则增加内存限制,但是这个ini_get(‘memory_limit’)调用返回字符串值,如“128M”,而不是整数.
我知道我可以编写一个函数来解析这些字符串(将事件和尾随’B’考虑在内),因为我已经写了很多次:
function int_from_bytestring ($byteString) { preg_match('/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i',$byteString,$matches); $num = (float)$matches[1]; switch (strtoupper($matches[2])) { case 'E': $num = $num * 1024; case 'P': $num = $num * 1024; case 'T': $num = $num * 1024; case 'G': $num = $num * 1024; case 'M': $num = $num * 1024; case 'K': $num = $num * 1024; } return intval($num); }
然而,这很繁琐,这似乎是PHP中已经存在的随机事情之一,尽管我从未找到过.有没有人知道一些内置的方法来解析这些字节量字符串?
我觉得你没有运气.
ini_get()的PHP手册实际上解决了一个关于ini_get()如何返回ini值的警告的具体问题.
他们在其中一个例子中提供了一个功能来做到这一点,所以我猜这是要走的路:
function return_bytes($val) { $val = trim($val); $last = strtolower($val[strlen($val)-1]); switch($last) { // The 'G' modifier is available since PHP 5.1.0 case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; }