Отдача файла по запросу.

riff

Новичок
Отдача файла по запросу.

На сервере отдаваемые страницы сжимаются gzip'ом, zip'ы и jpeg'и не сжимаются. Здесь всё нормально.

Проблема начинается здесь:
Надо один из зипов отдавать не по прямой ссылке, а типа: "сайт.ru?get=abc"
PHP:
//здесь записывается статистика по нему
//а далее отдаётся сам файл
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=abc.zip;');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize('...../abc.zip'));
@readfile('...../abc.zip');
Соответственно gzip добросовестно сжимает отправляемое содержимое и zip приходят заархивированный в gzip. Как бы gzip'у сказать что это не надо сжимать? Наврятли этим можно манипулировать в скрипте, но может как-то в ".htaccess"?
 

DiMA

php.spb.ru
Команда форума
че-то у тебя каша из терминов
покажи весь код скрипта
 

riff

Новичок
так это весь скрипт и есть.
в первых строках несколько sql (ну грубо говоря, записывается в базу кол-во скачиваний этого файла), а затем отдача этого файла (то что выше написал).
с отключённым gzip'ом файл нормально отдаётся и все браузеры его понимают и сохраняют.
 

Активист

Активист
Команда форума
у вас сервер (апаче н-р) что-ли контент ганзипит? и отдает ганзип?
 

DiMA

php.spb.ru
Команда форума
если это весь код - с чего бы сервер выдает GZIP? покажи это место
 

riff

Новичок
Активист: Ну вроде бы получается что так. (сейчас админа, блин, нет. как появится уточню), но по крайне мере файл abc.zip он возвращает обёрнутым в gzip(т.е. его можно распаковать, и за тем zip тоже распаковать).

-~{}~ 18.02.09 19:42:

вобщем отключили gzip (если не ошибаюсь то что-то вроде a2dismod deflate), файл стал загружаться в нормальном виде.
также мне дали ссылку http://www.askapache.com/htaccess/setenvif.html там вроде бы(пока не читал) в ".htaccess" можно по какому-то условию прописать "не сжимать" некоторые запросы.

DiMA: извини что сразу не ответил. ответ Активиста заметил, а твой нет. с чего бы сервер выдает GZIP? покажи это место это реально был весь скрипт. после readfile никаких более функций, полный выход.
 

Активист

Активист
Команда форума
riff
Я так и думал, что стоит deflate. Это явно не PHP. Вы в правильном направлении.

DiMA
http://sysoev.ru/mod_deflate/
http://sourceforge.net/projects/mod-gzip/
 

fixxxer

К.О.
Партнер клуба
вменяемый mod-deflate не будет сжимать application/zip - хотя проверить надо.

может ob_gzhandler где то в ini?

UPD - а, оказался невменяемый =)
 

Активист

Активист
Команда форума
Можете попробовать следующее добавить в виртуальной хост
<Location /download>
RemoveOutputFilter DEFLATE
</Location>

И перетащить PHP-ный фаил в download.

и еще
чтобы небыло проблем, нужно gzip'ть только
text/html text/plain text/xml text/css

Для этого, нужно поменять
SetOutputFilter DEFLATE
на
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
 

riff

Новичок
Истина где-то рядом:
строка "AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css" есть.

ссылка на скачивание имеет такой вид:
сайт.ru/index.html?get=abc
заголовок приходит такой
Pragma: public
Expires: 0
Cache-Control: public
Content-Description: File Transfer
content-disposition: attachment; filename=abc.zip;
Content-Transfer-Encoding: binary
Content-Type: application/zip
Via: 1.1 сайт.ru
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

вместе с "испорченным" файлом

при такой ссылке
сайт.ru/?get=abc
такой заголовок
Pragma: public
Expires: 0
Cache-Control: public
Content-Description: File Transfer
content-disposition: attachment; filename=abc.zip;
Content-Transfer-Encoding: binary
Content-Length: 79218
Content-Type: application/zip
Via: 1.1 сайт.ru
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

с нормальным файлом

Файла index.html физически не существует.

Если в AddOutputFilterByType убрать text/html
то по этой ссылке сайт.ru/index.html?get=abc будет приходить нормальный файл.
Короче deflate ориентируется на расширение в адресной строке и думает, что отдают html.
На отдаваемый мной заголовок application/zip он не обращает внимание.
Вопрос: а должен? и если да, то что поправить?
 
Сверху