Existe uma maneira fácil no PHP para converter de seqüências de caracteres como '256M', '180K', '4G' para seus equivalentes inteiros?
Eu preciso testar o valor retornado porini_get('memory_limit')
e aumentar o limite de memória se estiver abaixo de um determinado limite,ini_get('memory_limit')
call retorna valores de string como '128M' ao invés de inteiros.
Eu sei que posso escrever uma função para analisar essas cadeias de caracteres (considerando maiúsculas e minúsculas 'B's) como as escrevi várias vezes:
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);
}
No entanto, isso fica tedioso e isso parece uma daquelas coisas aleatórias que já existiriam no PHP, embora eu nunca tenha encontrado. Alguém sabe de alguma maneira interna para analisar essas seqüências de quantidade de bytes?