PHP форсирует загрузку файлов. Не показывает, сколько места было загружено - PullRequest
1 голос
/ 11 января 2010

У меня проблема, у меня есть PHP-скрипт, который сжимает изображения в Zip-файле и затем заставляет zip-файл загружаться. Теперь моя проблема заключается в том, что в IE не отображается, сколько места было загружено. Например, 2 МБ из 20 МБ ..... осталось 15 секунд. Firefox отлично работает.

Мой код

           header("Content-Disposition: attachment; filename=" . urlencode($zipfile));
        header("Content-Type: application/x-zip-compressed");
        header("Content-Description: File Transfer");    
           header("Content-Transfer-Encoding: binary");
           header("Content-Length: " . filesize($filename));

            $fd = fopen($filename,'r');

            $content = fread($fd, filesize($filename));



            print $content;

1 Ответ

3 голосов
/ 11 января 2010

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

Вы могли бы попробовать что-то более похожее на:

if ($file = fopen($filename, 'rb')) {
    while(!feof($file)) {
        print(fread($file, 1024*8));
        flush();
    }
    fclose($file);
}

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

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