2010-08-18 4 views
9

¿cómo puedo obtener el "tamaño de archivo" de una cadena en php?tamaño de archivo de una Cadena

Puse la cadena en una base de datos mysql como blob y necesito almacenar el tamaño del blob. Mi solución fue crear un archivo temporal y poner la cadena en el archivo temporal. ahora puedo obtener el tamaño de archivo de la "cadena". pero esa solución no es buena ...

saludos

Respuesta

40

Depende. Si tiene habilitado mbstring function overloading, la única llamada que funcionará será mb_strlen($string, '8bit');. Si no está habilitado, strlen($string) también funcionará bien.

lo tanto, puede manejar ambos casos como este:

if (function_exists('mb_strlen')) { 
    $size = mb_strlen($string, '8bit'); 
} else { 
    $size = strlen($string); 
} 
+0

¡gracias! ¡funciona! – poldixd

+1

+1 esta es la respuesta correcta –

+0

¿Cuidar para explicar el voto a favor? ¿Qué hay de malo o incompleto en esta respuesta? – ircmaxell

0

Si todo lo que está almacenando es la cadena, entonces el tamaño debe ser la longitud de sus tiempos de cadena el número de bytes en el juego de caracteres. Entonces para Unicode eso sería 2 * strlen ($ string).

+0

yo sepa sólo caracteres especiales tienen el doble de tamaño. Así que la letra 'a' tendrá un byte, pero las letras como ó, ł, ż, ć, ś etc. tendrán una longitud de 2 bytes –

+0

Oh, yo no sabía eso. Aclamaciones. –

+0

Sí, UTF-8 es una codificación de ancho variable, los caracteres pueden tener entre 1 y 4 bytes de longitud. http://en.wikipedia.org/wiki/UTF-8 –

-3

use mb_strlen() como entonces puede decirle qué tipo de codificación utiliza la cadena (si existe) para obtener el tamaño de la misma en bytes.

+0

Pensándolo bien, lo siento, pero esto es rotundamente incorrecto. 'mb_strlen()' junto con una codificación de múltiples bytes está diseñado para devolver el tamaño de la cadena en * caracteres *, no en bytes. -1 –

+0

Tras una investigación adicional en lugar de simplemente leer cosas (que haré una nota mental para hacer más en el futuro), aún puede usar mb_strlen() para obtener el resultado deseado omitiendo el segundo parámetro o estableciendo el segundo parámetro ser de 8 bits – gabe3886

+0

@gabe yup, es incluso la * única * forma a prueba de balas según la respuesta de @ ircmaxell (yo tampoco estaba enterado de eso). –

1
strlen() 

antes de ponerlo en mysql, o en SQL:

LENGTH() 

en cuenta que una longitud puede ser varios, dependiendo del juego de caracteres. Si usted quiere tener la longitud real en bytes utilizan strlen(), si usted quiere tener mb_strlen uso recuento de caracteres() (si tiene codificación UTF-8, por ejemplo)

+0

strlen() puede estar defectuoso, vea la respuesta de @ ircmaxell –

6

longitud SELECT (campo) de la tabla

Desde el MySQL docs:

lONGITUD (str)

devuelve la longitud de la cadena str, medido en bytes. Un carácter de varios bytes cuenta como bytes múltiples. Esto significa que para una cadena que contiene cinco caracteres de dos bytes, LONGITUD() devuelve 10, mientras que CHAR_LENGTH() devuelve 5.

+0

+1 esta es la respuesta correcta en mySQL end –

Cuestiones relacionadas