Gibberish возвращается при запуске fopen / file_get_contents с одним сервером, но не с другим - PullRequest
1 голос
/ 22 мая 2011

Я создаю скрипт для проверки работоспособности сайтов, читая содержимое данной страницы и ища в ней предопределенную строку (если сайт недоступен, строка не будет найдена).

Я читаю содержимое страницы с помощью функции file_get_contents, проблема в том, что в некоторых редких случаях получаемый контент является просто Gibberish. Я пытался сделать то же самое с fopen и даже с curl. Начало бред со всеми функциями Сначала я думал, что это из-за проблем с кодировкой (страницы UTF8), и я пытался поиграть со всеми параметрами, но это не так.

Все стало намного страннее, когда я решил протестировать код на другом сервере. Работало отлично! те же самые страницы, которые возвращают бред на моей станции разработчика, возвращают читаемый текст при работе на моем другом веб-сервере.

На обеих станциях установлена ​​последняя версия WAMP в качестве среды разработки. Есть ли у вас какие-либо предложения относительно того, что может вызвать это?

1 Ответ

4 голосов
/ 22 мая 2011

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

$site = file_get_contents('http://example.com');
echo gzdecoder($site);

function gzdecoder($d){
    $f=ord(substr($d,3,1));
    $h=10;$e=0;
    if($f&4){
        $e=unpack('v',substr($d,10,2));
        $e=$e[1];$h+=2+$e;
    }
    if($f&8){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&16){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&2){
        $h+=2;
    }
    $u = gzinflate(substr($d,$h));
    if($u===FALSE){
        $u=$d;
    }
    return $u;
}

EDIT:

не уверен, нечетные настройки. Я сталкивался с этой проблемой раньше с некоторыми сайтами

SetEnv no-gzip dont-vary в файле .htaccess отключает его

...