Foros del Web » Programando para Internet » PHP »

Transformando el tamaño de un archivo

Estas en el tema de Transformando el tamaño de un archivo en el foro de PHP en Foros del Web. quien tiene otra posibilidad para hacer este codigo lo que hace es trasformar el tamaño de un archivo osea 201545728 esto es el tamaño del ...
  #1 (permalink)  
Antiguo 15/07/2003, 23:45
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 0
Transformando el tamaño de un archivo

quien tiene otra posibilidad para hacer este codigo
lo que hace es trasformar el tamaño de un archivo osea

201545728 esto es el tamaño del archivo
y como deberia estar
201 MB
este codigo lo hace pero quisas es muy engorroso mi pregunta se puede hacer esto con menos pasos

Código PHP:
if (strlen($torrent["info"]["length"]) >= 11){
             
$show_filesize substr($torrent["info"]["length"],0,2)."GB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= 10){
             
$show_filesize substr($torrent["info"]["length"],0,1)."GB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= 9){
             
$show_filesize substr($torrent["info"]["length"],0,3)."MB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= 8){
             
$show_filesize substr($torrent["info"]["length"],0,2)."MB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= 7){
             
$show_filesize substr($torrent["info"]["length"],0,1)."MB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= ){
             
$show_filesize substr($torrent["info"]["length"],0,3)."KB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= ){
             
$show_filesize substr($torrent["info"]["length"],0,2)."KB";
            }
        elseif (
strlen($torrent["info"]["length"]) >= ){
             
$show_filesize substr($torrent["info"]["length"],0,1)."KB";
            }
        else{
             
$show_filesize "0 KB";
            }

en php.net aparecen algunos ejemplos de hacerlo de otra forma pero el problema que esos solo aproximan el tamaño

osea que esto

201545728

lo transforman a

192.1 MB

salu2

Informacion de ultimo hora
ME equivoque el tema por que aparece redondeado el tamaño del archivo es por que 1 mb son 1024 kb

se me olvido jejejej

salu2

Última edición por kech; 16/07/2003 a las 09:37
  #2 (permalink)  
Antiguo 16/07/2003, 09:36
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Hola Kech...

Pues temo decirte que esos ejemplos estan correctos... ya que un mega no es un millon de bytes exactamente, sino un numero cercano a eso...

Te paso una información que puede serte util para entender esto...

Código:
Kilo      K      2^10 = 1,024 
Mega      M      2^20 = 1,048,576 
Giga      G      2^30 = 1,073,741,824 
Tera      T      2^40 = 1,099,511,627,776

Por lo tanto,

201,545,728 / 1,048,576 = 192.20 Mb

__________________
Manoloweb

Última edición por Manoloweb; 16/07/2003 a las 09:39
  #3 (permalink)  
Antiguo 16/07/2003, 09:38
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 0
Gracias fue una pequeña laguna mental jejejeje


salu2
  #4 (permalink)  
Antiguo 16/07/2003, 09:40
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
Hola,

Antes que nada, y como ya lo mencionó nuestro amigo, quisiera apuntar que el ejemplo que mencionas al final de tu mensaje tiene un resultado correcto (o al menos más cerca del valor correcto de lo que aparentemente piensas). 201545728 bytes son aproximadamente 192 megabytes.

Recuerda que:

Código:
1024  b = 1 kb
1024 kb = 1 mb
1024 mb = 1 gb
etc.
Ahora bien, si realmente quieres obtener otra forma, quizás más simple, corta, elegante, etc. de escribir el algoritmo que has copiado en tu mensaje, se mo ocurre algo como esto:

Código:
<?php

$tam = 201545728;  // Tamanyo original sobre el que se desea operar.


// Arreglo que asocia las unidades con una cantidad determinada de digitos.

$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 5);


// Se almacena la cantidad de digitos del valor original previamente

$digitos = strlen ($tam);


// foreach es una construccion del lenguaje PHP, version 4. En caso de
// no disponer de esta version, podria usarse el clasico for.

$tam_final = '';  // Variable en donde se almacena el resultado final.

foreach (array_keys ($unidades) as $unidad) {
    if ($digitos >= $unidades[$unidad]) {
        $tam_final = substr ($tam, 0, $digitos - $unidades[$unidad] + 1) .
                     " $unidad";
        break;
    }
}

if ($tam_final == '')
    $tam_final = '0 KB';


// Imprimir el resultado.

print "El tamaño despues de ser procesado es $tam_final";

?>

Nota que esta versión trata de ser completamente fiel al comportamiento original del código que has publicado. Este código en ciertas ocasiones produce resultados erróneos. Por ejemplo, si el valor original es 1024 (1 kb), el código produce el resultado "0 KB". Personalmente, creo que fue un error trivial que pasaste por alto cuando publicaste el código. Un arreglo simple sería modificar esta línea:

Código:
$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 5);
con esto:

Código:
$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 4);

Finalmente, una inquietud, ¿administras un sitio web que administra contenido publicado mediante ByteTorrent? Parece interesante. :)

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.