2011-07-06 10 views
6

Mój skrypt PHP wyprowadza zawartość pliku .sql, po tym jak został wywołany przez żądanie POST od mojego klienta Delphi Desktop.PHP - Udostępniaj swój własny rozmiar klientowi (dzięki czemu klient wie, ile pobiera)

Oto co się dzieje:

  1. pulpicie Klient wysyła żądanie POST do mojego skryptu PHP.
  2. Następnie skrypt wywołuje mysqldump i generuje plik - xdb_backup.sql
  3. skrypt, który będzie następnie include "xdb_backup.sql"; wydrukować i odesłać go do programu Desktop Client, po czym usuwa plik SQL.

Problem polega na tym, że rozmiar pliku SQL może być różny (w przypadku testowania wygenerowałem taki, który wynosi 6 mb). Chciałbym, aby mój klient na pulpicie był w stanie pokazać postęp, jednak skrypt PHP nie eksponuje jego rozmiaru, więc nie mam żadnej wartości do przypisania.

W jaki sposób mogę zrobić mój skrypt PHP, aby poinformować klienta, jak duży jest before the whole thing is over?

Uwaga: Pobieranie pliku SQL nie jest opcją, ponieważ skrypt musi go zniszczyć. :)

+0

Jedyny sposób mogę zobaczyć ten sposób robi się szorstka zbliżenia w oparciu o liczbę pól danych istnieją i jak duże one wydają się być . Ale bardzo interesujące q +1 – Obto

+0

@Oto dziękuję za +1 :) - Okazało się jednak, że odpowiedź była prosta. :) – Jeff

Odpowiedz

10

Można by zrobić

$fsize = filesize($file_path); 

gdzie $ ścieżka_do_pliku będzie ścieżka do wygenerowanego xdb_backup.sql plików

aby uzyskać rozmiar pliku w serwerze i powrócić nagłówki z poniższej linii załączeniu.

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

Spójrz na http://www.hotscripts.com/forums/php/47774-download-script-not-sending-file-size-header-corrupt-files-since-using-remote-file-server.html, który wyjaśnia, pobierz skrypt php.

+0

Perfect :) - Zaakceptowany! – Jeff

1

Musisz wysłać nagłówek Content-Length za pomocą funkcji header. Coś takiego:

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

Możesz wysłać plik za pomocą readfile zamiast dołączyć.

+0

Czy klient będzie znał rozmiar przed rozpoczęciem przetwarzania pliku sql? – Jeff

+0

'readfile' spowodował zawieszenie mojej aplikacji. : P – Jeff

1

Można ustawić nagłówek Content-Length z rozmiarem xdb_backup.sql

Powiązane problemy