2012-01-06 6 views
7

Estoy usando la extensión de progreso de carga PHP para recuperar información sobre los archivos que se cargan en mi sistema web. Sin embargo, para archivos de más de 2 GB, los bytes totales y los campos restantes de tiempo se devuelven como números negativos.Progreso de carga de la extensión PHP - devolviendo los bytes totales negativos y el tiempo restante

Apache se ha configurado para garantizar que los archivos de un tamaño de hasta 3 GB puedan cargarse en el sitio web. Lo he probado y funciona. Sin embargo, es puramente la información que está regresando incorrectamente.

Me preguntaba si esto tenía algo que ver con un límite en los valores de PHP y qué se podría hacer para solucionarlo. Creo que el sistema usa enteros de 64 bits. Como muestra el siguiente:

echo "PHP_INT_MAX: " . PHP_INT_MAX; 
// PHP_INT_MAX: 9223372036854775807 

He aquí alguna información adicional sobre cómo funciona la barra de progreso y se instala: http://www.ultramegatech.com/blog/2010/10/create-an-upload-progress-bar-with-php-and-jquery/

Para obtener la información que simplemente llamar a la función de extensión:

$status = uploadprogress_get_info($unique_form_id); 

Qué devuelve el total de bytes, tiempo restante, bytes actuales y más, como se muestra a continuación (con bytes totales negativos):

array(11) { 
    ["upload_id"]=> string(32) "ec75a30c24177ec1579aea93b56224f2" 
    ["fieldname"]=> string(9) "comp_data" 
    ["filename"]=> string(15) "Size_2-09GB.zip" 
    ["time_start"]=> string(10) "1325851749" 
    ["time_last"]=> string(10) "1325851758" 
    ["speed_average"]=> string(5) "93011" 
    ["speed_last"]=> string(6) "112618" 
    ["bytes_uploaded"]=> string(6) "837105" 
    ["bytes_total"]=> string(11) "-2048166056" 
    ["files_uploaded"]=> string(1) "1" 
    ["est_sec"]=> string(9) "-76260228" 
} 

Actualización (6 de enero de 2012): también me he puesto en contacto con el desarrollador de esta extensión para ver si pueden compartir alguna información.

actualización (del 9 ene 2012): desarrollador de la extensión ha respondido señalando que no es un ticket existente respecto a este tema: https://bugs.php.net/bug.php?id=59918

Actualización (16 de ene 2012): Han logrado deshacerse del valor negativo siendo devuelto por la extensión. Sin embargo, el número devuelto está muy lejos del número real de bytes totales en comparación con lo que dice Windows en la ventana de propiedades.

+1

¿Cómo está obteniendo y mostrando el tamaño del archivo? – ManseUK

+1

Los números negativos suenan como un viaje de ida y vuelta. ¿Es probable que el archivo en cuestión sea cercano o superior a 2 GB? – hakre

+0

Sí, el archivo está por encima de 2 GB como se indica en la pregunta anterior. – diggersworld

Respuesta

2

Utilice un flotador y eliminar los decimales - esto funcionará para estos números más grandes:

$filesize = filesize($large_file); 
printf(Filesize: %.0f\n", $filesize); 

Esta respuesta confirmará si está utilizando enteros de 64 bits: how to have 64 bit integer on PHP?

Nota: aunque hay otra respuesta a esa pregunta que parece indicar que los enteros de 64 bits no están disponibles en Windows, ¿qué sistema operativo está usando?

+0

comprobé mis datos con el enlace que proporcionó ... están usando 64 bits. Han agregado esto a la pregunta. No estoy obteniendo el tamaño del archivo, la extensión PHP lo proporciona. – diggersworld

Cuestiones relacionadas