Как правильно отдать сжатый файл?

Panchous

Павел
Как правильно отдать сжатый файл?

Ситуация банальная:
1. при аплоде файл сжимается gz
2. когда юзер хочет получить файл обратно - он распаковывается и отдается

для выдачи файла юзеру использую такой код:
Код:
[PHP]
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache'); 
header("Content-type: application/octet-stream\nContent-Disposition: inline; filename=\"".$filename."\"\nContent-length: ".(string)(filesize($completeFilePath))); 

$fp = gzopen($completeFilePath, 'r');
gzpassthru($fp);
gzclose($fp);
[/PHP]
но вместо диалога о закачке - файл просто отображается
(гоняю картинку для теста)

для простого download'a писал так (все работало, как и ожидалось):
Код:
[PHP]
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache'); 
header("Content-type: application/octet-stream\nContent-Disposition: inline; filename=\"".$filename."\"\nContent-length: ".(string)(filesize($completeFilePath))); 
$fd=fopen($completeFilePath,'rb'); 
fpassthru($fd); 
fflush($fd);
[/PHP]
Собственно вопрос:
как правильно решить мою задачу
(разпаковать файл на сервере и одать юзеру на закачку)
????
 

Donald

Новичок
При работе с изображениями, чтобы увидеть сообщение об ошибке, обязательно надо догадаться отключить вывод заголовка, говорящего браузеру, что дальше идет картинка.
 

Panchous

Павел
Спасибо, посмотрел...

Действительно, в случае с распаковкой отсутствуют заголовки:
Код:
Content-Disposition: inline; filename="me.jpg"
Content-length: 2836
но я не догоняю почему так происходит?
туплю?

-~{}~ 14.03.05 13:40:

Автор оригинала: Donald
При работе с изображениями, чтобы увидеть сообщение об ошибке, обязательно надо догадаться отключить вывод заголовка, говорящего браузеру, что дальше идет картинка.
каким образом?
 

Фанат

oncle terrible
Команда форума
Panchous
а вот интересно.
почему у тебя первые два заголовка не напиханы к остальным?
 

Panchous

Павел
Автор оригинала: Фанат
Panchous
а вот интересно.
почему у тебя первые два заголовка не напиханы к остальным?
Фанат
когда я впервые ситолкнулся с задачей загрузки файла,
я нашел решение на ЭТОМ форуме (пост admin'a)
и просто использовал его.

спасибо за наводку.
Код:
[PHP]
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache');
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-length:".(string)(filesize($completeFilePath)));
[/PHP]
теперь работает)

но я так и не понял причину моего бага
(хочу разобраться до конца)
 

Gas

может по одной?
Panchous
btw, Content-length ты отдаёшь запакованного файла, а для распакованного он есно больше.
 

Panchous

Павел
Gas
да-да, поправлю.
но кто обяснит причину неудач моих первых попыток?
 

Фанат

oncle terrible
Команда форума
Возможно, что и никто.
не на все вопросы бывают ответы.
то есть, причина-то ясна - ты неправильно применял header
а вот механизм - почему оно раньше работало - думаю, останется без ответа. ищи сам.
 
Сверху