1. 游客, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

GZIP и Очистка буфера - как решить проблему?

本贴由 wsok2014-11-09 发布. 版块名称: Веб

  1. TopicStarter Overlay

    wsok Программист Пользователи

    注册日期:
    2012-11-07
    帖子:
    606
    支持:
    174
    性别:
    Репутация:
    3
    Наткнулся на хабре на статью http://habrahabr.ru/post/151795/

    в ней меня заинтересовал следующий код для своих целей:

    PHP:
    function file_force_download($file) {
      if (
    file_exists($file)) {
        
    // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
        // если этого не сделать файл будет читаться в память полностью!
        
    if (ob_get_level()) {
          
    ob_end_clean();
        }
        
    // заставляем браузер показать окно сохранения файла
        
    header('Content-Description: File Transfer');
        
    header('Content-Type: application/octet-stream');
        
    header('Content-Disposition: attachment; filename=' basename($file));
        
    header('Content-Transfer-Encoding: binary');
        
    header('Expires: 0');
        
    header('Cache-Control: must-revalidate');
        
    header('Pragma: public');
        
    header('Content-Length: ' filesize($file));
        
    // читаем файл и отправляем его пользователю
        
    if ($fd fopen($file'rb')) {
          while (!
    feof($fd)) {
            print 
    fread($fd1024);
          }
          
    fclose($fd);
        }
        exit;
      }
    }
    Код в принципе рабочий, но если не использовать gzip сжатие на сайте, при включенном гзип ob_end_clean(); тут же вываливается в ошибку

    代码:
    Код ошибки: ERR_CONTENT_DECODING_FAILED
    Так вот, задача и собственно вопрос, как заставить работать ob_end_clean именно при ВКЛЮЧЕННОМ гзип сжатии? Гугл оказался несколько скуп на мои запросы...
  2. TopicStarter Overlay

    wsok Программист Пользователи

    注册日期:
    2012-11-07
    帖子:
    606
    支持:
    174
    性别:
    Репутация:
    3
    В общем, выходит, что решения нет, кроме как на момент обращения к этому скрипту, просто отключать гзип. Увы, но решение пока получается именно такое.
  3. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    注册日期:
    2010-04-02
    帖子:
    754
    支持:
    1,313
    性别:
    Репутация:
    6
    Попробуй убрать эту строку
    已获得wsok的支持.
  4. TopicStarter Overlay

    wsok Программист Пользователи

    注册日期:
    2012-11-07
    帖子:
    606
    支持:
    174
    性别:
    Репутация:
    3
    Спасибо, но проверять не стал, решил обойтись как писал выше, в момент вызова скрипта, отключается гзип.
Черновик сохранён Черновик удалён

分享此页面