2009-03-17 18 views
8

Estoy seguro de que esto se ha preguntado antes, pero como parece que no puedo encontrar una buena respuesta, aquí estoy, preguntando ... otra vez. :)¿El progreso de carga usando PHP/AJAX puro?

¿Hay alguna manera, utilizando solo una mezcla de HTML, JavaScript/AJAX y PHP, para informar el progreso real de una carga de archivo?

En respuesta a cualquiera que sugiere SWFUpload o similar:

Lo sé todo sobre ella. Siguió por ese camino. Estoy buscando una solución 100% pura (y sí, sé que probablemente no la obtenga).

Respuesta

1

Si usted es capaz de añadir paquetes PECL en sus correspondientes PHP, no es el paquete uploadprogress.

Sin embargo, la forma más sencilla sería utilizar swfupload.

+0

He marcado esto como la respuesta, porque la manera más simple es simplemente usar SWFUpload. :) –

+4

el sí más simple, pero creo que no califica como "puro PHP/AJAX"? :) – Jacco

0

Te recomiendo que pruebes cinco FancyUpload es una solución muy buena para la barra de progreso y no está necesariamente asociada a php. Pedido también las otras herramientas a digitarald.de

aplausos

1

¿Hay alguna manera, usando sólo una mezcla de HTML, JavaScript/AJAX y PHP, para informar del progreso real de un archivo subido?

No conozco ninguna forma de supervisar las cargas de archivos HTML simples (multipart/form-data) en PHP cargado en webserver.

Necesita tener acceso al progreso del analizador multipart/form-data a medida que ingresan los datos, pero esto parece imposible porque las formas de acceder al cuerpo de solicitud HTTP desde PHP ($HTTP_RAW_POST_DATA y php://input) están documentadas como "No disponible con enctype =" multipart/form-data "".

Puede hacer una carga de archivos con script en Firefox utilizando un campo de carga FileList para capturar el contenido de un archivo para enviarlo de forma segmentada o no multiparte. Sin embargo, aún queda mucho trabajo por analizar.

(Incluso se puede ejecutar un script PHP como un servidor independiente en otro puerto sólo para recibir la carga de archivos, utilizando su propio código HTTP de manejo. Pero eso es una enorme cantidad de trabajo para la relativamente poca ganancia.)

+0

Hay una extensión PECL que hace exactamente lo que se necesita. – Jacco

-1

En mi humilde opinión, este es el problema que los navegadores web deberían resolver. Tenemos un medidor de progreso para las descargas, ¿por qué no también para las subidas?

Tome un vistazo a esto, por ejemplo:

http://www.fireuploader.com/

+0

Si pudiera incluir esta funcionalidad en todos los navegadores principales, sería una solución muy buena. Hasta entonces, tendremos que trabajar con las limitaciones actuales y construir la funcionalidad nosotros mismos. – Jacco

2

Si tiene APC instalado (y en este punto, realmente debería, será estándar en PHP6), tiene una opción para habilitar el seguimiento de carga. Hay some documentation, y Rasmus ha escrito code sample que usa YUI.

+0

Esto sería perfecto, excepto que no está instalado en mi servidor, y no es seguro para subprocesos, por lo que realmente no tiene sentido. Tal vez en PHP6. ;) –

5

La supervisión de la carga de archivos con PHP/Javascript requiere que la extensión PECL:

uploadprogress

Un buen ejemplo del código necesario para mostrar el progreso de sus usuarios es:

Uber Uploader

Si no me equivoco, utiliza JQuery para comunicarse con PHP.


También podría escribirlo usted mismo, no es tan complejo.

Añadir un elemento oculto como el primer elemento del formulario de carga, llamado UPLOAD_IDENTIFIER.

Poll un script PHP que llama uploadprogress_get_info(UPLOAD_IDENTIFIER) devolverlo una matriz que contiene lo siguiente:

 
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 devolver la información a Javascript y usted debe tener un montón de información. Dependiendo de la audiencia, es probable que no use toda la información disponible.

Cuestiones relacionadas