woonem
@woonem

По чему не работает PHP код получения страницы по HTTP?

По чему не работает код (он пишет только "Result:" и пустота, см. hosthack.tk/?server=hostinger.ru&num=1 и вообще загружается 12 секунд):

echo 'Result:<br><br>'."\n";

$request = "GET / HTTP/1.1\r\n";
$request .= "Host: ".$_GET[server]."\r\n";
$request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n";
$page=@fsockopen($_GET[server], 80, $errno, $errstr);
$text=fgets($page);
$text=substr($text, 0, strripos($text, ' '));
$text=str_replace("\r\n", ' ', $text);
$text=str_replace("\n", ' ', $text);
$text=str_replace('<', ' <', $text);
$text=preg_replace(array("/<script(.*)<\/script>/", "/<title(.*)<\/title>/", "/<textarea(.*)<\/textarea>/", "/<style(.*)<\/style>/"), ' ', $text);
$text=strip_tags($text);
$text=trim(preg_replace("/ +/", ' ', $text));

if(strlen($text) > 999){
  $text=substr($text, 0, 999);
  $textipos=strripos($text, ' ');
  $text=substr($text, 0, $textipos);
  $text.=" ...";
}else
  echo $text;


Проблемный код:
$request = "GET / HTTP/1.1\r\n";
$request .= "Host: ".$_GET[server]."\r\n";
$request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n";
$text=fgets(@fsockopen($_GET[server], 80, $errno, $errstr));


То есть если вместо него написать $text=file_get_contents('http://'.$_GET[server]);, то всё заработает. Только к file_get_contents() некоторые сайты относятся отрицательно и не дают свою страницу. По этому решил взять fsockopen().

Если закомментировать строку $text=fgets($page);, то страница загружается с естественной быстрой скоростью, но результат не меняется.
  • Вопрос задан
  • 550 просмотров
Решения вопроса 2
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Почему бы не использовать curl или уже готовые библиотеки, вроде этой: simplehtmldom.sourceforge.net ? Или не прописать условия, мол, если file_get_contents не сработал, то делать с сокетами? Дело в том, что на хостинге может не проходить Ваш user agent или могут резаться соединения по иным фильтрам.
А может fsockopen выдает ошибку? У Вас же подавление ошибок через собаку, если ее убрать, ворнинги какие-то посыпятся же, верно?
Что в $errno и $errstr?
Ответ написан
@Fly3110
web developer
А где Вы пишете $request в сокет?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы