Domanda

Qualcuno conosce qualche metodo per creare una barra di avanzamento del caricamento di file in PHP? Ho sentito spesso che è impossibile.

Ho un'idea, ma non sono sicuro che funzionerebbe: avere un normale caricamento di file, ma invece inviare a un iframe. Quando viene inviato, archiviare le informazioni sul file (dimensione e posizione temporanea) nella sessione. Allo stesso tempo, avvia una chiamata AJAX ogni 10 secondi per verificare la dimensione del file rispetto alla dimensione memorizzata nella sessione. Ciò restituirebbe le dimensioni ad AJAX e quindi una barra di avanzamento verrebbe dimensionata e forse mostrerebbe all'utente le dimensioni caricate.

Pensieri?

È stato utile?

Soluzione

Altri suggerimenti

Sei praticamente riuscito a capire come farlo. Il problema principale è che di solito non hai accesso alle dimensioni del file caricato fino al completamento del caricamento.

Esistono soluzioni alternative per questo: Abilitando APC, puoi accedere a queste informazioni se includi un campo chiamato " APC_UPLOAD_PROGRESS " e utilizzare apc_fetch () per recuperare una voce della cache con lo stato.

Esiste anche un plug-in chiamato uploadprogress ma non è molto ben documentato e non funziona su Windows (ultimo controllo comunque).

Un'alternativa è usare Flash per farlo. Vedi script come FancyUpload .

Prima che arrivasse APC dovevo scrivere uno script CGI in C che scrivesse informazioni in un file di testo. APC sembra un modo molto migliore per farlo ora.

Spero che questo aiuti.

Finora, il modo più comune per farlo è SWFUpload: http://www.swfupload.org/

Tuttavia, è possibile con PHP puro, molto difficile e molto sperimentale. Vedrò se riesco a trovare il link.

Modifica: Secondo i commenti su php.net, a partire da 5.2 c'è un gancio per gestire l'avanzamento del caricamento. http://us.php.net/features.file-upload#71564

Altre spiegazioni:

Esempio di Rasmus:

In puro PHP, hai ragione: non è possibile.

Se AJAX-ify questo, allora potresti fare quello che stai descrivendo. Gli unici indicatori di progresso che abbia mai visto sono in Javascript o Flash, anche se immagino che Silverlight potrebbe farlo anche.

" Vecchia scuola " ;, ma una tecnica PHP + Perl : http://www.raditha.com/php/progress.php

Secondo me, la soluzione migliore / più semplice è costruire un piccolo widget flash, che consiste in un pulsante "Carica" ??e una barra di avanzamento. Flash fornisce un feedback molto dettagliato su quanti dati sono stati caricati finora e puoi costruire una bella barra di avanzamento basata su quello. Non richiede il polling inefficiente del server e in realtà non richiede alcuna modifica al codice del server. Google per "Flash Uploader" e scoprirai che molte persone hanno già scritto questi widget e sono felici di venderli per un dollaro.

Consiglio di guardare SWFUpload per realizzare ciò che desideri. È abbastanza flessibile e supporta l'accodamento dei file, quindi puoi persino gestire i caricamenti di più file.

Avrai sicuramente voglia di FancyUpload di digitgerald . Sono Mootools e amp; basato su swfuplaod, e sfoggia una bella coda con statistiche, progressi, eta ecc. È davvero il metodo più semplice che ho visto per caricare file. Per uso personale, Ivé lo ha utilizzato per consentire al client di selezionare 1,2 GB di file PDF e caricarli. I nuovi vengono rinominati e aggiornati automaticamente, gli stessi vengono ignorati, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top