Necesito probar el valor devuelto por ini_get('memory_limit')
y aumentar el límite de memoria si está por debajo de un cierto umbral, sin embargo, esta llamada ini_get('memory_limit')
devuelve valores de cadena como '128M' en lugar de enteros.¿Hay alguna manera fácil en PHP para convertir cadenas como '256M', '180K', '4G' a sus equivalentes enteros?
sé que puedo escribir una función para analizar estas cadenas (teniendo caso anterior y posterior 'de B en cuenta) como las he escrito en numerosas ocasiones:
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 esto parece ser una de esas cosas al azar que ya existirían en PHP, aunque nunca lo he encontrado. ¿Alguien sabe de alguna forma incorporada para analizar estas cadenas de cantidad de bytes?
Mismo problema que la respuesta de John: no maneja el seguimiento opcional B. – cletus
Sí, eso es cierto. Lo estaba proporcionando principalmente para ilustrar cómo el manual de PHP afirma que está hecho. Esto funcionaría si solo quisieras analizar los resultados de 'ini_get()', de lo contrario tendrías que modificarlo tú mismo. La respuesta breve a la pregunta de los carteles es realmente "No, no hay un método incorporado". – zombat
Estaba buscando esta información en la descripción de los valores de ini y en casi cualquier otro lugar que no sean los documentos de la función 'ini_get()'. Gracias por encontrar eso. –