Escenario: el tamaño de varios archivos se almacenan en una base de datos como bytes. ¿Cuál es la mejor manera de formatear esta información de tamaño en kilobytes, megabytes y gigabytes? Por ejemplo, tengo un MP3 que Ubuntu muestra como "5.2 MB (5445632 bytes)". ¿Cómo mostraría esto en una página web como "5.2 MB" Y tendría archivos de menos de un megabyte como KB y archivos de un gigabyte o más como GB?
184
Respuestas:
(Tomado de php.net , hay muchos otros ejemplos allí, pero este me gusta más :-)
fuente
$bytes /= (1 << (10 * $pow))
o algo parecido, me gustaría más. :-PKiB
,MiB
,GiB
yTiB
ya que están dividiendo por1024
. Si lo dividiera por1000
, sería sin eli
.Uncomment one of the following alternatives
fue algo que no noté durante 5 minutos ...Esta es la implementación de Chris Jester-Young, la más limpia que he visto, combinada con php.net y un argumento de precisión.
fuente
$suffixes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
¡quiero un disco duro de Yottabyte! :-PformatBytes(259748192, 3)
devuelve lo259748192 MB
que no está bienPseudocódigo:
fuente
Esta es la implementación de Kohana , puedes usarla:
fuente
$force_unit
y$si
parecen hacer lo mismo. También puede pasar cualquier cadena con una "i"$force_unit
, ya que prueban la posición. El formato decimal también es excesivo.Simplemente divídalo por 1024 para kb, 1024 ^ 2 para mb y 1024 ^ 3 para GB. Tan sencillo como eso.
fuente
Solo mi alternativa, corta y limpia:
o, más estúpido y eficiente:
fuente
usa esta función si quieres un código corto
bcdiv ()
fuente
Sé que tal vez sea un poco tarde para responder esta pregunta, pero más datos no van a matar a alguien. Aquí hay una función muy rápida:
EDITAR: Actualicé mi publicación para incluir la solución propuesta por camomileCase:
fuente
Función simple
fuente
Solución flexible:
fuente
Tuve éxito con la siguiente función,
fuente
Mi acercamiento
fuente
No sé por qué deberías hacerlo tan complicado como los demás.
El siguiente código es mucho más simple de entender y aproximadamente un 25% más rápido que las otras soluciones que usan la función de registro (llamada la función 20 millones de veces con diferentes parámetros)
fuente
Este trabajo con el último PHP
fuente
Hice esto convirtiendo toda la entrada a byte y convirtiéndola a cualquier salida necesaria. Además, utilicé una función auxiliar para obtener la base 1000 o 1024, pero la dejé flexible para decidir usar 1024 en el tipo popular (sin 'i', como MB en lugar de MiB).
fuente
prueba esto ;)
fuente
fuente
Solo llama a la función
fuente
Aunque un poco obsoleto, esta biblioteca ofrece una API de conversión probada y robusta:
https://github.com/gabrielelana/byte-units
Una vez instalado:
Y para convertir en la otra dirección:
Más allá de la conversión básica, ofrece métodos para sumar, restar, comparar, etc.
No estoy afiliado de ninguna manera con esta biblioteca.
fuente
fuente
Aquí está la implementación simplificada de la función Drupal format_size :
fuente
Es un poco tarde, pero a continuación se muestra una versión un poco más rápida de la respuesta aceptada:
Es más eficiente, debido a que realiza una única operación log-2 en lugar de dos operaciones log-e.
Sin embargo, en realidad es más rápido hacer la solución más obvia a continuación:
Esto se debe a que el índice se calcula al mismo tiempo que el valor del número de bytes en la unidad apropiada. Esto redujo el tiempo de ejecución en aproximadamente un 35% (un aumento de velocidad del 55%).
fuente
Otra implementación condensada que puede traducirse a la base 1024 (binaria) o la base 1000 (decimal) y también funciona con números increíblemente grandes, por lo tanto, del uso de la biblioteca bc:
fuente
bcpow()
lanzará la excepción TypeError si$base
y$i
no son valores de cadena. Probado en PHP versión 7.0.11.Pensé que agregaría una malla de dos códigos de remitentes (usando el código de John Himmelman, que está en este hilo, y usando el código de Eugene Kuzmenko ) que estoy usando.
Esto usa el código de Eugene para formatear los
$value
bytes (mantengo mis datos en MB, por lo que convierte mis datos:10485760 MB
en10995116277760
); luego usa el código de John para convertirlos en el valor de visualización adecuado (10995116277760
en10 TB
).He encontrado esto realmente útil, ¡así que gracias a los dos presentadores!
fuente
Función extremadamente simple para obtener el tamaño de archivo humano.
Fuente original: http://php.net/manual/de/function.filesize.php#106569
Copiar / pegar código:
fuente
Desarrollé mi propia función que convierte el tamaño de la memoria legible para humanos a diferentes tamaños.
Esta función acepta cualquier abreviatura de tamaño de memoria como "Megabyte, MB, Mb, mb, m, kilobyte, K, KB, b, Terabyte, T ....", por lo que es seguro para errores tipográficos.
fuente
Base en la respuesta de Leo , agregue
Si desea la unidad máxima a Mega, cambie a
$units = explode(' ', ' K M');
fuente