LINUX.ORG.RU

php: fopen gzip


0

0

такая ситуация. делаю fopen("http://www.some.domain", "r"). потом fpassthru - все ок. т.е. в браузере нормально отображается титульная страница www.some.domain.

делаю fopen("http://www.some.domain/script.pl?var1=123&var2=567";, "r"). потом fpassthru - в браузере непонятный набор символов. Методом проб и ошибок, открывая через fsockopen, формируя запрос, выясняю что непонятный набор символов - gzip.

В тоже время если просто через браузер открыть страницу http://www.some.domain/script.pl?var1=123&var2=567, то она отображается вполне нормально.

Вопрос, как мне этот полученный gzip сделать нормальным html файлом? И вобще, в чем грабли, почему в через браузер все ок, а в php нет.

Может кто подскажет форум по php, а то здесь наверно не совсем в тему.

anonymous

Ответ наугад: заголовок какой-нибудь нужен, типа
header("Content-Coding: gzip");
или вроде того

vnp
()

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

Броузер показывает именно потому, что сие и есть его предназначение -- ну, помимо gzip -- это ему уметь необязательно, подозреваю, что, например, IE просто предложит сохранить файло на диск.

С уважением -- Смоляное Чучелко

anonymous
()

а вроде в http запросе браузер должен указать, может-ли он gzip показывать?

ага, fopen:
If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server, the page is requested using the HTTP GET method, and a file pointer is returned to the beginning of the body of the response.

в http 1.0 ничего такого нет, следовательно, сервер не прав

Anonymous ★★★★★
()

> а вроде в http запросе браузер должен указать, может-ли он gzip показывать?

Нет. Он _может_ указать, и сервер может, выбирая из возможных вариантов, выбрать оный gzip. Однако уж если ты заказал gzip, ты получишь то, что есть.

Дабы показать, что я тоже не чужд чтения доков ;)

Note that the file pointer allows you to retrieve only the body of the response; to retrieve the HTTP response header you need to be using PHP 4.0.5 or later; The headers will be stored in the $http_response_header variable. As of PHP 4.3.0, the header information can be retrieved using the file_get_wrapper_data().

Анализируй хидера и почти мануалы по proc_open -- пожалуй, это наилучший выход в этом случае.

С уважением -- Смоляное Чучелко

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.