PHP скачать файл: показать прогресс в браузере

Пользователь на моем сайте может скачивать файлы. Иногда эти файлы довольно велики, и я бы хотел, чтобы пользователи видели индикатор загрузки в своих браузерах.

Я использую следующий код, чтобы дать пользователю файл:

header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename='.$fileName);
header('Pragma: no-cache');
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
header('Content-Length: '.filesize($fullFileName));
header("Content-Description: File Transfer");

$fileHandler = fopen($fullFileName, 'r');
while(!feof($fileHandler)){
echo fread($fileHandler, 2048);
}
fclose($fileHandler);

Когда я запускаю этот скрипт, браузер (FireFox) зависает на некоторое время, я вижу загрузочный цветовой круг и только после появления файла диалога сохранения / открытия. Когда я нажимаю кнопку «Сохранить», файл почти сразу загружается на мой компьютер (размер файла довольно большой — 50 Мб).

Я хочу иметь систему загрузки, как на этом сайт. Диалог для сохранения / opean появляется сразу после нажатия на любую ссылку. И после вы можете увидеть прогресс загрузки в вашем браузере.

Есть ли специальные заголовки для отображения индикатора выполнения в браузере? Как я должен изменить свой код?

0

Решение

Я использую приведенный ниже код, и в Firefox он дает мне время загрузки и прогресс:

// send headers first
header('Content-type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-disposition: attachment; filename='.$FileName);
header("Content-Length: ".filesize($Path));
// then use an easy way to flush and end all output buffers
while (@ob_end_flush());
// flush file
readfile($Path);

Это должно работать, если вы укажете Content-Length правильно. Единственное, что я нахожу слегка странным в вашем коде, это Content-Type: text/xml заголовок. Обратите внимание, что я использую Content-type: application/octet-stream,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]