2012-03-02 5 views
5

Hola, un servidor con un script PHP que se ocupa de la descarga de imágenes. Después de que termine de descargar todas las imágenes, las comprime y luego un usuario puede descargarlas.Monitor Progreso de zip en un servidor separado

Para solicitar este proceso, un usuario hace clic en un botón en una página web que luego le dice a mi sitio web que le indique a este otro servidor que inicie este proceso. Esto es así para que el servidor web que se ocupa de las solicitudes no se ocupe de la descarga/compresión de archivos y no se agote el tiempo de espera.

Me preguntaba cómo puedo saber el progreso de la compresión en la página web de los usuarios para notificar al usuario cuando se completa el proceso de compresión.

Respuesta

2

Haría un archivo de cola con el mismo nombre que "el archivo zip creado" pero con otra extensión.

En su servidor que crea el archivo de descarga, permita que el script cree otro archivo con el mismo nombre pero un código de estado como extensión. (ex 123456789.PRO significa en curso y 123456789.DON para que sea listo) El script que hace que el archivo zip a continuación, puede actualizar este nombre de archivo, antes del inicio hace que el archivo .PRO y terminó .DON)

Ahora en su servidor web haga una llamada ajax que lea un script PHP, que a su regreso comprueba si el archivo existe.

archivo no existe: no se ha iniciado el proceso existe .PRO archivo: existe PROCESAMIENTO .DON archivo: Crear enlace de descarga

La llamada AJAX se pudo comprobar cada pocos segundos, depende de ti y cuánto carga del servidor querer.

0

Puede configurar el sondeo a través de ajax desde el cliente para solicitar el progreso cada x segundos.

En el script php que pueda pasar con velocidad de salida de la marcha a un/tmp/archivo, como

zip -v filename.zip file1 file2 file3 > /tmp/tmpid.txt 

En el script php de responder, puede leer el archivo de salida TMP (por ejemplo /tmp/zip_af45d26746a4e5bf01.txt) y calcule el progreso y regrese al navegador.

+0

postal -v en php? usando esa lógica sería mejor agregar un contador en el bucle for donde se realiza el ajuste de todos los archivos y encontrar la relación entre el elemento actual sobre el total de elementos y la salida a un archivo. ¿A partir de eso, puede solicitar al servidor que solo devuelva la diferencia porcentual y actualizar una barra en consecuencia? – mirugai

0

La idea con el sondeo del estado del archivo comprimido a través de exec() fue perfecta para un proyecto que creaba grandes archivos zip para mí.

he usado en el zip-escritura de una declaración como:

exec("zip -qdgds 10m output.zip file1.php file2.php > log_dot.txt"); 

y ahora otro encuestas de script ajax y calcular (archivos cuyo tamaño en general y de puntos * 10 MB cada uno) el proceso real de la creación de la zip- archivo.

Tal vez el manual de ayuda de otra persona también zip-maual

Cuestiones relacionadas