2011-07-06 4 views
6

Mi script PHP está produciendo el contenido de un archivo .sql, después de que haya sido llamado por una solicitud POST desde mi Delphi Desktop Client.PHP - Exponer el tamaño propio al cliente (para que el cliente sepa cuánto está descargando)

Esto es lo que está sucediendo:

  1. Mi Escritorio El cliente envía una solicitud POST a mi script PHP.
  2. El script llama a continuación mysqldump y genera un archivo - xdb_backup.sql
  3. La secuencia de comandos include "xdb_backup.sql"; que imprimirá y devolverlo al cliente de escritorio, después de lo cual se elimina el archivo SQL.

El problema es que el tamaño del archivo SQL puede variar (para las pruebas, generé uno que es de 6 mb). Me gustaría que mi cliente de escritorio pueda mostrar el progreso, sin embargo, el script PHP no expone su tamaño, por lo que no tengo ningún valor Progressbar.Max para asignar.

¿Cómo puedo hacer que mi script PHP le indique al cliente lo grande que es before the whole thing is over?

Nota: Descargar el archivo SQL no es una opción, ya que el script debe destruirlo. :)

+0

La única forma que veo de hacer esto es hacer una aproximación basada en el número de campos de datos que hay y lo grandes que tienden a ser . Pero muy interesante q +1 – Obto

+0

@Obto Gracias por el +1 :) - Resulta que la respuesta fue simple sin embargo. :) – Jeff

Respuesta

10

Harías

$fsize = filesize($file_path); 

donde $ ruta_archivo será ruta de acceso al archivo generado xdb_backup.sql,

para obtener el tamaño del archivo en el servidor y los encabezados de volver con la siguiente línea adjunto.

header("Content-Length: " . $fsize); 

Tome un vistazo a http://www.hotscripts.com/forums/php/47774-download-script-not-sending-file-size-header-corrupt-files-since-using-remote-file-server.html que explica un script php descarga.

+0

Perfecto :) - ¡Aceptado! – Jeff

1

Debe enviar un encabezado Content-Length utilizando la función header. Algo como esto:

header('Content-Length: '.filesize('yourfile.sql'));

es posible que desee enviar el archivo usando readfile en lugar de incluir.

+0

¿El cliente conocerá el tamaño antes de comenzar a procesar el archivo sql? – Jeff

+0

'readfile' hizo que mi aplicación se congelara. :PAG – Jeff

1

Puede establecer la cabecera Content-Length con el tamaño de xdb_backup.sql

Cuestiones relacionadas