2016-03-24 2 views
0

У меня есть PHP-скрипт как часть моей системы, которая объединит файлы в tar.gz, tar.xz или zip-файл и доставляет их пользователю, просматривающему сайт ,Создание файла tar.gz с PHP, сжатый файл

Скачивание файлов tar.xz и zip выполняется безупречно. Но с tar.gz у меня не так много удачи.

Я использую Apache 2.2.15 с модулем mod_deflate и настроен на выход gzip.

Если вы делаете запрос с Accept-Encoding: gzip, он отправляет tar.gz с двойным сжатием (например, gz (gz (tar (...)))), который, насколько я понимаю, является «правильный» способ (хотя это бесполезно двойное сжатие).

Я устанавливаю заголовок Content-Type: application/x-gzip из PHP при доставке этого файла.

Когда я это делаю, кажется, что Firefox не отменяет второй уровень сжатия gzip при загрузке (слой, который применяет Apache). Когда я изменяю тип контента на что-то еще, проблема не возникает, и я получаю файл tar.gz. В обоих случаях Apache добавляет еще один уровень сжатия и отправляет заголовок Content-Encoding: gzip.

Как я могу решить эту проблему, сохраняя желаемый тип контента, чтобы пользователь мог фактически открыть файл в правильной программе?


Но я знаю, что это пример XY задачи, так как правильно исправление будет отключить дополнительную компрессию в Apache. Я не хочу, однако, отключить сжатие для остальной части моего сайта. Как я могу заставить PHP сказать Apache, чтобы он не сжимал этот конкретный вывод?

+1

Вы можете отключить gzip для определенных вещей в apache. Вам не нужно отключать его для всего вашего сайта. – PeeHaa

ответ

1

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

<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/ecmascript application/rss+xml 
</IfModule> 

Все, что уже сжато, кажется, пустая трата времени и циклов процессора.

+0

Простите меня, если я ошибаюсь, но это не сработает, поскольку расширение .php отображается на текст/html типа MIME до Apache, поэтому результат заключается в том, что вывод из скриптов PHP всегда сжимается, включая мои динамические .tar.gz архивы, хотя я установил другой тип контента из PHP. – OlivierTheOlive

+0

Будет ли достаточно отключить сжатие для определенного файла php? Попробуйте: SetEnvIfNoCase Request_URI "\. (Php) $" no-gzip dont-vary Вы также можете изменить запрос uri, чтобы описать ваш php-файл, из которого не следует сжимать вывод. – DevilaN

Смежные вопросы