curl and ping - как проверить, работает ли сайт или нет? - PullRequest
22 голосов
/ 05 января 2011

Я хочу проверить, работает ли сайт в определенном случае с помощью PHP. Я узнал, что curl будет загружать содержимое файла, но я не хочу читать содержимое сайта. Я просто хочу проверить статус сайта. Есть ли способ проверить статус сайта? Можем ли мы использовать ping для проверки статуса? Мне достаточно получить сигналы состояния, такие как (404, 403 и т. Д.) С сервера. Небольшой фрагмент кода может мне очень помочь.

Ответы [ 7 ]

44 голосов
/ 05 января 2011

как то так должно работать

    $url = 'yoururl';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if (200==$retcode) {
        // All's well
    } else {
        // not so much
    }
9 голосов
/ 31 мая 2012
function checkStatus($url) {
    $agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; pt-pt) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27";

    // initializes curl session
    $ch = curl_init();

    // sets the URL to fetch
    curl_setopt($ch, CURLOPT_URL, $url);

    // sets the content of the User-Agent header
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);

    // make sure you only check the header - taken from the answer above
    curl_setopt($ch, CURLOPT_NOBODY, true);

    // follow "Location: " redirects
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    // return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // disable output verbose information
    curl_setopt($ch, CURLOPT_VERBOSE, false);

    // max number of seconds to allow cURL function to execute
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);

    // execute
    curl_exec($ch);

    // get HTTP response code
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    curl_close($ch);

    if ($httpcode >= 200 && $httpcode < 300)
        return true;
    else
        return false;
}

// how to use
//===================
if ($this->checkStatus("http://www.dineshrabara.in"))
    echo "Website is up";
else
    echo "Website is down";
exit;
8 голосов
/ 28 августа 2012
curl -Is $url | grep HTTP | cut -d ' ' -f2
5 голосов
/ 05 января 2011

Вы видели функцию get_headers ()? http://it.php.net/manual/en/function.get-headers.php. Кажется, он делает именно то, что вам нужно.

Если вы используете curl напрямую с флагом -I, он вернет заголовки HTTP (404 и т. Д.) Вместо HTML страницы. В PHP эквивалентом является опция curl_setopt($ch, CURLOPT_NOBODY, 1);.

4 голосов
/ 27 июня 2014

Вот как я это сделал. Я установил агент пользователя, чтобы свести к минимуму вероятность того, что цель забанит меня, а также отключил проверку SSL, так как знаю цель:

private static function checkSite( $url ) {
    $useragent = $_SERVER['HTTP_USER_AGENT'];

    $options = array(
            CURLOPT_RETURNTRANSFER => true,      // return web page
            CURLOPT_HEADER         => false,     // do not return headers
            CURLOPT_FOLLOWLOCATION => true,      // follow redirects
            CURLOPT_USERAGENT      => $useragent, // who am i
            CURLOPT_AUTOREFERER    => true,       // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 2,          // timeout on connect (in seconds)
            CURLOPT_TIMEOUT        => 2,          // timeout on response (in seconds)
            CURLOPT_MAXREDIRS      => 10,         // stop after 10 redirects
            CURLOPT_SSL_VERIFYPEER => false,     // SSL verification not required
            CURLOPT_SSL_VERIFYHOST => false,     // SSL verification not required
    );
    $ch = curl_init( $url );
    curl_setopt_array( $ch, $options );
    curl_exec( $ch );

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return ($httpcode == 200);
}
4 голосов
/ 05 января 2011

ping не будет делать то, что вы ищете - он только скажет вам, если машина включена (и отвечает на ping).Это не обязательно означает, что веб-сервер запущен.

Возможно, вы захотите попробовать использовать метод http_head - он будет получать заголовки, которые веб-сервер отправляет вам обратно.Если сервер отправляет обратно заголовки, вы знаете, что он работает и работает.

2 голосов
/ 05 января 2011

Вы не можете проверить веб-сервер с ping, потому что это другой сервис. Сервер может работать, но демон веб-сервера в любом случае может быть сбой. Так что керл твой друг. Просто игнорируйте контент.

...