2008-10-01 54 views
5

¿Alguien sabe de algún método para crear una barra de progreso de carga de archivos en PHP? A menudo he escuchado que es imposible.Crear una barra de progreso de archivo en PHP

Tengo una idea, pero no estoy seguro de si funcionaría: tener una carga normal de archivos, pero en su lugar enviarla a un iframe. Cuando esto se envía, almacene la información del archivo (tamaño y ubicación temporal) en la sesión. Al mismo tiempo, inicie una llamada AJAX a cada digamos 10 segundos para verificar el tamaño del archivo en comparación con el tamaño almacenado en la sesión. Esto devolvería el tamaño al AJAX y luego se dimensionaría una barra de progreso y tal vez se mostraría el tamaño subido al usuario.

¿Pensamientos?

Respuesta

3

Usted puede intentar YUI o Prototype o JQuery

+0

¡jQuery parece la mejor manera de hacerlo! Thxs, no sabía que tenía un complemento. –

0

En PHP puro, tiene razón: no es posible.

Si AJAX-ify esto, entonces podría hacer lo que está describiendo. Los únicos medidores de progreso que he visto están en Javascript o Flash, aunque imagino que Silverlight también podría hacerlo.

6

que está bastante descubierto la manera de hacerlo. El problema principal es que, por lo general, no tiene acceso al tamaño del archivo cargado hasta que haya terminado de cargarlo.

Existen soluciones para esto: Habilitando APC, puede acceder a esta información si incluye un campo llamado "APC_UPLOAD_PROGRESS" y utiliza apc_fetch() para recuperar una entrada de caché con el estado.

También hay un complemento llamado uploadprogress pero no está muy bien documentado y no funciona en Windows (la última vez que lo comprobé).

Una alternativa es utilizar Flash para hacerlo. Ver scripts como FancyUpload.

Antes de que llegara APC, tuve que escribir una secuencia de comandos CGI en C que escribía información en un archivo de texto. Sin embargo, APC parece una forma mucho mejor de hacerlo ahora.

Espero que esto ayude.

+0

Cuando vi esta pregunta, cosa progreso de carga de APC vinieron a la mente también. Sé que Rasmus incluso creó una muestra para ella en alguna parte, pero no puedo encontrarla ahora. – Powerlord

+0

Rasmus: http://progphp.com/progress.phps – davethegr8

5

Hasta el momento, la forma más común de hacer esto es SWFUpload: http://www.swfupload.org/

Sin embargo, es posible con PHP puro, sólo muy difícil y muy experimental. Veré si puedo encontrar el enlace.

Editar: De acuerdo con los comentarios en php.net, a partir de 5.2 hay un gancho para manejar el progreso de carga.http://us.php.net/features.file-upload#71564

Más explicación:

Ejemplo Rasmus':

0

En mi opinión, la mejor y más fácil solución es crear un pequeño widget flash, que consiste en un botón 'Subir' y una barra de progreso. Flash le brinda comentarios muy detallados sobre la cantidad de datos que se han cargado hasta el momento, y puede crear una barra de progreso agradable en función de eso. No requiere un sondeo ineficiente del servidor, y de hecho no requiere ningún cambio en el código del servidor. Google para 'flash uploader' y usted encontrará que muchas personas ya han escrito estos widgets y están encantados de venderlos por un dólar.

0

Recomendaría mirar SWFUpload para lograr lo que desea. Es bastante flexible y admite cola de archivos, por lo que incluso podría manejar cargas de múltiples archivos.

0

Pero sin duda que quiera ir con digitgerald's FancyUpload. Es Mootools & basado en swfuplaod, y tiene una buena cola con statusses, progress, eta, etc. Es realmente el método más hábil que he visto para subir archivos. Para mi caso de uso personal ivé lo usé para permitir que el cliente seleccionara 1.2 gb de archivos PDF y los subiera. Los más nuevos se renombran y versionado de forma automática, la misma se saltan, etc.