¿Existe una forma fácil en PHP para convertir de cadenas como '256M', '180K', '4G' a sus equivalentes enteros?
Necesito probar el valor devuelto porini_get('memory_limit')
y aumente el límite de memoria si está por debajo de un cierto umbral, sin embargo estoini_get('memory_limit')
call devuelve valores de cadena como '128M' en lugar de enteros.
Sé que puedo escribir una función para analizar estas cadenas (teniendo en cuenta el caso y el final de 'B'), ya que las he escrito varias veces:
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);
}
Sin embargo, esto se vuelve tedioso y parece una de esas cosas aleatorias que ya existirían en PHP, aunque nunca lo encontré. ¿Alguien sabe de alguna forma incorporada para analizar estas cadenas de bytes?