Pregunta

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

Tengo una idea, pero no estoy seguro de si funcionaría: tener una carga de archivo normal, pero en lugar de enviarla a un iframe. Cuando se envíe, almacene la información del archivo (tamaño y ubicación temporal) en la sesión. Al mismo tiempo, inicie una llamada AJAX cada 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 mostraría el tamaño cargado al usuario.

¿Pensamientos?

¿Fue útil?

Solución

Otros consejos

Ya has averiguado cómo hacerlo. El problema principal es que, por lo general, no tiene acceso al tamaño del archivo cargado hasta que se termine de cargar.

Hay soluciones para esto: Al habilitar APC, usted puede acceder a esta información si incluye un campo llamado " APC_UPLOAD_PROGRESS " y use 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 verifiqué).

Una alternativa es usar Flash para hacerlo. Consulte los scripts como FancyUpload .

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

Espero que esto ayude.

Hasta ahora, la forma más común de hacerlo es SWFUpload: http://www.swfupload.org/

Sin embargo, es posible con PHP puro, simplemente 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 la carga. http://us.php.net/features.file-upload#71564

Más explicación:

Ejemplo de Rasmus ':

Desde PHP 5.4 está en extensión de sesión: http: // php. net // manual / pl / session.upload-progress.php

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

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

" Old school " ;, pero una técnica PHP + Perl : http://www.raditha.com/php/progress.php

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 proporciona comentarios muy detallados sobre la cantidad de datos que se han cargado hasta ahora, y puede crear una buena barra de progreso basada en eso. No requiere un sondeo ineficiente del servidor y, de hecho, no requiere ningún cambio en el código de su servidor. Busque "flash uploader" en Google y encontrará que muchas personas ya han escrito estos widgets y están felices de vendérselos por un dólar.

Recomiendo consultar SWFUpload para lograr lo que desea. Es bastante flexible y admite la puesta en cola de archivos, por lo que incluso podría manejar cargas de múltiples archivos.

Definitivamente, querrás ir con FancyUpload de digitgerald . Es Mootools & amp; basado en swfuplaod, y tiene una buena cola con estados, progreso, eta, etc. Es realmente el método más ingenioso que he visto para cargar archivos. Para mi uso personal, ivé lo usó para permitir que el cliente seleccione 1.2 gb de archivos PDF y los cargue. Los nuevos se renombran y versionan automáticamente, los mismos se omiten, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top