В цикле с помощью file_get_contents() загружаю около 100 страниц с внешнего сайта и некоторые из них возвращаются в виде кракозябров вот такого типа Код (Text): ‹мY[oЫЦћ?Е)ѓVvm‰’_"KкЫY3$m`{Љў((сXўM‘*IЩqТ|·^^Љ¶KљmШЫE6V2iIоЪb–эО9¤n–\w+°=L†m^юзї+ыЪъ»kЫпЭЫ ooЯЅCоэожќЫkDЉЛтжЧdy}{]јёћH’mK1lНСLCСeyг)?•e/уЩ·7VЧqгhЋNуwЁб( «–!џ‘o‚NЗу2дiГ;v»nл Причем, если скрипт запустить ещё раз, может быть такое, что страница, которая раньше была с кракозябрами вернулась в нормальном html формате, а которая была в нормальном формате теперь в кракозябрах. Че за дела? Выставил паузу между загрузками страниц, не помогло. Может у кого есть мысли по этому поводу.
Похоже это gzip-ованая версия страницы. Используй CURL или свой обработчик который будет заголовки просматривать.
Заголовки ответа можно довольно просто посмотреть и при обычном file_get_contents: Код (PHP): <?php // ... $content = file_get_contents($site_url); print_r($http_response_header); // ... ?>
Ясненько, попробую предложенные варианты. Если я правильно понял, надо просмотреть заголовки и, если окажется gzip, распаковать его. Поправьте если не так.
Задача решилась. Действительно дело было из-за архивов. Проверяем заголовки, если архив, открываем и читаем. В моем случае получился такой код: Код (Text): if(isset($http_response_header[6]) and $http_response_header[6] == "Content-Encoding: gzip") { $html = ""; $fp = gzopen($file, "r"); while (!gzeof($fp)) { $buffer = gzgets($fp, 4096); $html .= $buffer; } gzclose($fp); } Спасибо artoodetoo за идею и sobachnik за просмотр заголовков!
Warning: gzopen(http://lenta.ru/): failed to open stream: HTTP request failed! <html> in C:\www\index.php on line 28 чем лечить?