2009-03-17 8 views
8

Sono sicuro che questo è stato chiesto prima, ma dato che non riesco a trovare una buona risposta, eccomi, chiedendo ... di nuovo. :)Carica i progressi utilizzando puro PHP/AJAX?

C'è un modo, utilizzando solo una combinazione di HTML, JavaScript/AJAX e PHP, per segnalare l'avanzamento effettivo di un caricamento di file?

In risposta a chiunque suggerendo SWFUpload o simile:

So tutto su di esso. Siamo passati da quella strada. Sto cercando una soluzione pura al 100% (e sì, lo so che probabilmente non lo otterrò).

risposta

1

Se siete in grado di aggiungere pacchetti PECL in PHP, c'è il pacchetto uploadprogress.

Il modo più semplice sarebbe utilizzare solo swfupload, però.

+0

L'ho contrassegnato come risposta, perché il modo più semplice è usare semplicemente SWFUpload. :) –

+4

il più semplice si, ma penso che non si qualifichi come "puro PHP/AJAX"? :) – Jacco

0

Ti consiglio a cinque FancyUpload a prova è una soluzione davvero interessante per la barra di avanzamento e non è necessariamente collegata a php. Acquista anche gli altri strumenti a digitarald.de

acclamazioni

1

C'è un modo, utilizzando solo un misto di HTML, JavaScript/AJAX e PHP, per segnalare il progresso reale di un file di caricamento?

Non conosco alcun modo per monitorare semplici caricamenti di file HTML (multipart/form-data) in PHP con server web.

È necessario avere accesso all'avanzamento dell'analizzatore di dati multiparte/dati quando i dati arrivano, ma questo sembra impossibile perché i modi di accedere al corpo della richiesta HTTP da PHP ($HTTP_RAW_POST_DATA e php://input) sono documentati come "Non disponibile con enctype =" multipart/form-data "".

È possibile eseguire un caricamento di file con script in Firefox utilizzando il campo di caricamento FileList per prelevare il contenuto di un file da inviare in modo segmentato o non multipart. Comunque un po 'di lavoro da analizzare però.

(Si potrebbe anche eseguire uno script PHP come un server autonomo su un'altra porta solo per ricevere file, utilizzando il proprio codice HTTP di gestione. Ma questa è una quantità enorme di lavoro per relativamente poco guadagno.)

+0

C'è un'estensione PECL che fa esattamente ciò che è necessario. – Jacco

-1

IMHO, questo è il problema che i browser Web dovrebbero risolvere. Abbiamo un indicatore di avanzamento per i download, quindi perché non per i caricamenti?

Date un'occhiata a questo, ad esempio:

http://www.fireuploader.com/

+0

Se potessimo includere questa funzionalità in tutti i browser mayor per noi, sarebbe una soluzione molto bella. Fino ad allora, dovremo solo lavorare con i limiti attuali e costruire autonomamente le funzionalità. – Jacco

2

Se hai installato APC (e a questo punto dovresti proprio farlo, sarà standard in PHP6), ha un'opzione per abilitare il tracciamento del caricamento. C'è some documentation e Rasmus ha scritto un code sample che utilizza YUI.

+0

Questo sarebbe perfetto, tranne che non è installato il mio server, e non è thread-safe, quindi non ha senso in realtà. Forse in PHP6. ;) –

5

Monitoraggio tuoi upload di file con PHP/Javascript richiede l'estensione PECL:

uploadprogress

Un buon esempio del codice necessario per visualizzare lo stato di avanzamento per gli utenti è:

Uber Uploader

Se non sbaglio utilizza JQuery per comunicare con PHP.


Si potrebbe anche scrivere da soli, non è così complesso.

Aggiungere un elemento nascosto come prima elemento del modulo di caricamento, denominato UPLOAD_IDENTIFIER.

Poll uno script PHP che chiama uploadprogress_get_info(UPLOAD_IDENTIFIER) Si restituire un array contenente le seguenti:

 
time_start  - The time that the upload began (unix timestamp), 
time_last  - The time that the progress info was last updated, 
speed_average - Average speed in bytes per second, 
speed_last  - Last measured speed in bytes per second, 
bytes_uploaded - Number of bytes uploaded so far, 
bytes_total - The value of the Content-Length header sent by the browser, 
files_uploaded - Number of files uploaded so far, 
est_sec  - Estimated number of seconds remaining. 

Let PHP restituire le informazioni per Javascript e si dovrebbe avere un sacco di informazioni. A seconda del pubblico, probabilmente non utilizzerai tutte le informazioni disponibili.