PHP get_headers () альтернатива - PullRequest
6 голосов
/ 22 мая 2011

Мне нужен скрипт PHP, который читает код ответа HTTP для каждого запроса URL.

что-то вроде

$headers = get_headers($theURL);
return substr($headers[0], 9, 3);

Проблема в том, что функция get_headers () отключена на уровне сервера, как политика. Так что она не работает.

Вопрос в том, как получить код ответа HTTP для URL?

Ответы [ 3 ]

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

Если включен cURL, вы можете использовать его для получения всего заголовка или только кода ответа.Следующий код присваивает код ответа переменной $response_code:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
curl_exec( $curl );
$response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );

Чтобы получить весь заголовок, вы можете выполнить запрос HEAD, например:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
$headers = explode( "\n", curl_exec( $curl ) );
curl_close( $curl );
4 голосов
/ 22 мая 2011

Используйте HttpRequest, если можете: http://de2.php.net/manual/en/class.httprequest.php

$request = new HttpRequest("http://www.example.com/");
$request->send();
echo $request->getResponseCode();

Или сделать это трудным путем: http://de2.php.net/manual/en/function.fsockopen.php

$errno = 0;
$errstr = "";

$res = fsockopen('www.example.com', 80, $errno, $errstr);

$request = "GET / HTTP/1.1\r\n";
$request .= "Host: www.example.com\r\n";
$request .= "Connection: Close\r\n\r\n";

fwrite($res, $request);

$head = "";

while(!feof($res)) {
    $head .= fgets($res);
}

$firstLine = reset(explode("\n", $head));
$matches = array();
preg_match("/[0-9]{3}/", $firstLine, $matches);
var_dump($matches[0]);

Curl также может быть хорошим вариантом, но лучший вариант - побить вашего админа;)

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

Вы можете создавать и читать свои собственные HTTP-запросы с помощью fsockopen и обычных файловых операций.Посмотрите мой предыдущий ответ на эту тему:

Есть ли другие варианты для остальных клиентов, кроме CURL?

...