PHP - выставить клиенту собственный размер (чтобы клиент знал, сколько он скачивает) - PullRequest
6 голосов
/ 07 июля 2011

Мой PHP-скрипт выводит содержимое файла .sql после того, как он был вызван POST-запросом из моего Delphi Desktop Client.

Вот что происходит:

  1. My Desktop Client отправляет запрос POST на мой PHP-скрипт.
  2. Затем скрипт вызывает mysqldump и генерирует файл - xdb_backup.sql
  3. Затем сценарий include "xdb_backup.sql";, который распечатает и вернет его клиенту рабочего стола, после чего удалит файл SQL.

Проблема в том, что размер файла SQL может варьироваться (для тестирования я создал файл размером 6 МБ). Я хотел бы, чтобы мой клиент для настольных компьютеров мог показывать прогресс, однако PHP-скрипт не отображает его размер, поэтому у меня нет значения Progressbar.Max для назначения.

Как я могу сделать свой PHP-скрипт, чтобы Клиент знал, насколько он большой before the whole thing is over?

Примечание. Загрузка файла SQL невозможна, так как сценарий должен его уничтожить. :)

Ответы [ 3 ]

10 голосов
/ 07 июля 2011

Вы бы сделали

$fsize = filesize($file_path); 

где $ file_path будет путем к сгенерированному файлу xdb_backup.sql,

чтобы получить размер файла на сервере и вернуть заголовки со следующей прикрепленной строкой.

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

Взгляните на http://www.hotscripts.com/forums/php/47774-download-script-not-sending-file-size-header-corrupt-files-since-using-remote-file-server.html, который объясняет скрипт php для загрузки.

1 голос
/ 07 июля 2011

Вы можете установить заголовок Content-Length с размером xdb_backup.sql

1 голос
/ 07 июля 2011

Вы должны отправить заголовок Content-Length, используя функцию header. Как то так:

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

Вы можете отправить файл, используя readfile вместо include.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...