Есть ли в PHP простой способ конвертировать строки типа «256M», «180K», «4G» в их целочисленные эквиваленты?

Мне нужно проверить значение, возвращаемоеini_get('memory_limit') и увеличить предел памяти, если он ниже определенного порога, однако этоini_get('memory_limit') call возвращает строковые значения, такие как '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, хотя я так и не нашел его. Кто-нибудь знает какой-нибудь встроенный способ разбора этих строк в байтах?

Ответы на вопрос(5)

Ваш ответ на вопрос