有没有一个简单的方法可以从“256M”,“180K”,“4G”等字符串转
发布时间:2020-12-13 16:32:18 所属栏目:PHP教程 来源:网络整理
导读:我需要测试由ini_get(‘memory_limit’)返回的值,如果它低于某个阈值,则增加内存限制,但是这个ini_get(‘memory_limit’)调用返回字符串值,如“128M”,而不是整数. 我知道我可以编写一个函数来解析这些字符串(将事件和尾随’B’考虑在内),因为我已经写了很多
我需要测试由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; } 他们有关于上述功能的说法:“上面的例子显示了将速记符号转换为字节的一种方式,就像PHP源代码一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |