加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

有没有一个简单的方法可以从“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源代码一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读