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

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

Тема в разделе 'Веб', создана пользователем wsok, 9 ноя 2014.

  1. TopicStarter Overlay

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

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Команда:
    WebServerOK [wsok.net]
    Наткнулся на хабре на статью 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 Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Команда:
    WebServerOK [wsok.net]
    В общем, выходит, что решения нет, кроме как на момент обращения к этому скрипту, просто отключать гзип. Увы, но решение пока получается именно такое.
  3. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    676
    Лайки:
    1.176
    Пол:
    Мужской
    Репутация:
    6
    Попробуй убрать эту строку
    wsok нравится это.
  4. TopicStarter Overlay

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

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Команда:
    WebServerOK [wsok.net]
    Спасибо, но проверять не стал, решил обойтись как писал выше, в момент вызова скрипта, отключается гзип.
Черновик сохранён Черновик удалён
Similar Threads
  1. xDDDDDDD
    Ответов:
    1
    Просмотров:
    413
  2. Constor
    Ответов:
    3
    Просмотров:
    371
  3. GreyDev
    Ответов:
    5
    Просмотров:
    678
  4. НеВаЖнО
    Ответов:
    6
    Просмотров:
    561
  5. sserviss
    Ответов:
    1
    Просмотров:
    384
Загрузка...

Поделиться этой страницей