2012-01-06 7 views
7

Sto utilizzando l'estensione di avanzamento caricamento PHP per recuperare informazioni sui file caricati sul mio sistema web. Tuttavia, per i file di dimensioni superiori a 2 GB, i byte totali e i campi rimanenti vengono restituiti come numeri negativi.Avanzamento caricamento estensione PHP - restituzione totale byte negativo e tempo rimanente

Apache è stato configurato per garantire che i file di dimensioni fino a 3 GB possano essere caricati sul sito web. Ho provato questo e funziona. Tuttavia è puramente la segnalazione che sta tornando in modo errato.

Mi chiedevo se questo fosse qualcosa a che fare con un limite ai valori di PHP e cosa si potrebbe fare per risolverlo. Credo che il sistema stia usando interi a 64 bit. Come mostra il seguente:

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

Ecco alcune informazioni in più su come funziona barra di avanzamento e viene installato: http://www.ultramegatech.com/blog/2010/10/create-an-upload-progress-bar-with-php-and-jquery/

Per ottenere le informazioni che ho semplicemente chiamare la funzione di estensione:

$status = uploadprogress_get_info($unique_form_id); 

Quale restituisce i byte totali, il tempo rimanente, i byte correnti e altro come mostrato di seguito (con byte totali negativi):

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" 
} 
Aggiornamento

(6 gennaio 2012): Ho anche contattato lo sviluppatore di questa estensione per vedere se possono condividere qualsiasi intuizione.

Update (9 gennaio 2012): sviluppatore dell'estensione ha risposto sottolineando che non v'è un ticket esistente riguardo a questo problema: https://bugs.php.net/bug.php?id=59918

Update (16 Gennaio 2012): sono riusciti a sbarazzarsi del valore negativo essere restituito dall'estensione. Tuttavia, il numero restituito è molto diverso rispetto al numero effettivo di byte totali rispetto a quello che Windows dice che si trova nella finestra delle proprietà.

+1

Come stai ricevendo e visualizzando il file? – ManseUK

+1

I numeri negativi suonano come un intero roundtrip. Probabilmente il file in questione è vicino o superiore a 2 GB? – hakre

+0

Sì, il file è superiore a 2 GB come indicato nella domanda precedente. – diggersworld

risposta

2

Utilizzare un galleggiante e rimuovere i decimali - questo lavoro per questi grandi numeri:

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

Questa risposta confermerà se si utilizza numeri interi a 64 bit: how to have 64 bit integer on PHP?

Nota: anche se v'è un'altra risposta a questa domanda che sembra indicare che gli interi a 64 bit non sono disponibili su Windows: quale sistema operativo stai usando?

+0

controllato i miei inte con il link che hai fornito ... stanno usando 64-bit. Ho aggiunto questo alla domanda. Non sto ottenendo il filesize da solo, l'estensione PHP lo fornisce. – diggersworld

Problemi correlati