2012-07-06 36 views

Respuesta

6
$start_memory = memory_get_usage(); 
$foo = "Some variable"; 
echo memory_get_usage() - $start_memory; 

Esto es bueno si se trabaja con cualquier tipo de var.

+0

Mejor solución que la mía. –

+12

Esto está un poco apagado. 'memory_get_usage() devuelve la cantidad de memoria, en bytes, que se está asignando actualmente a su script PHP. 'Su script asignó memoria para establecer la variable' $ foo' y la memoria para establecer la variable '$ foo' en una cadena y anexar un valor. El resultado es más alto que el conteo real de bit/byte de la cadena. –

+2

entonces ¿por qué siempre devuelve 272 cuando uso '" Alguna variable "' como cadena o '" Alguna variable Alguna variable Alguna variable '' (muchas veces)? Incluso si asigno una cadena vacía, aún muestra 272. Parece que este método no es preciso – vladkras

4

strlen() devuelve el número de bytes en una cadena.

+0

¿Sería la longitud sea igual al tamaño en bytes? un personaje es de 8 bits o no? – Sena

+0

Un carácter es de 1 byte (8 bits). – ametren

+2

@ametren: No siempre, cadenas multibyte (codificadas en Unicode) y pueden contener caracteres con más de 1 byte. –

7

Un carácter es de un byte, así que simplemente verifique la longitud de la cadena. Divida por 1024 si lo necesita en KB (prepárese para un decimal).

<?php echo "Message size is ".strlen($Message)."B"; ?> 
+2

solo uno que dijo dividir por 1024 para obtener KB, creo que todos saben esto pero nadie lo menciona, hasta votaron – Gntem

+0

yup, la cadena dada es aproximadamente .03KB – ametren

33

strlen devuelve el número de bytes en la cadena, no la longitud de caracteres. Ver el manual de PHP here.

Mire de cerca:

Nota:

strlen() devuelve el número de bytes en lugar del número de caracteres de una cadena.

Si toma el resultado y multiplica por 8, puede obtener bits.

Aquí hay una función que puede hacer los cálculos por usted.

function strbits($string){ 
    return (strlen($string)*8); 
} 

Nota, si se utiliza, memory_get_usage(), tendrá el valor incorrecto devuelto. El uso de la memoria es la cantidad de memoria asignada por el script PHP. Esto significa que, dentro de su analizador, está asignando memoria para la cadena y el valor de la cadena. Como resultado, el valor de esto antes y después de establecer una var sería mayor de lo esperado.

ejemplo, la cadena: Hello, this is just test message, produce los siguientes valores:

Memory (non-real): 344 bytes 
Strlen: 32 Bytes 
Strlen * 8bits: 256 bits 

Aquí está el código:

<?php 
$mem1 = memory_get_usage(); 
$a = 'Hello, this is just test message'; 

echo "Memory (non-real): ". (memory_get_usage() - $mem1)."\n"; 
echo "Strlen: ". strlen($a)."\n"; 
echo "Strlen * 8bits: ". (strlen($a) * 8),"\n"; 
+0

¿Qué es más rápido si no necesito un resultado preciso, 'strlen 'o' memory_get_usage'? – mgutt

+3

'strlen' es más rápido –

+4

Esta debería ser la respuesta aceptada. – Ryan

Cuestiones relacionadas