Почему file_get_contents () быстрее, чем использование fsock_open ()? - PullRequest
1 голос
/ 22 декабря 2010

В PHP иногда я хочу отправить HTTP-запрос на удаленный сайт, просто чтобы посмотреть заголовки ответа, поэтому я объявляю все это вручную и использую функцию fsock_open().Однако это происходит намного медленнее, чем вызов file_get_contents() с удаленного URL (который загружает весь контент страницы).Почему это?Есть ли хороший альтернативный способ получить только заголовки ответа (например, для проверки, возвращает ли страница ошибку 404), которая работает так же быстро, как file_get_contents()?

1 Ответ

0 голосов
/ 22 декабря 2010

Вы только что попробовали использовать curl? При желании вы можете вернуть заголовки, а также содержимое.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/
2008120122 Firefox/3.0.5";
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

$output = curl_exec($ch);
$info = curl_getinfo($ch);

Это будет преследовать перенаправления, что не всегда желательно.

Посмотрите на http://php.net/manual/en/function.curl-getinfo.php, чтобы увидеть, что вы получите в $info.

Вы можете попробовать выполнить запрос HEAD вместо GET (опция CURLOPT_NOBODY), но у меня возникли проблемы с некоторыми серверами, которые по какой-то причине отказывают в HEAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...