Hướng dẫn dùng manual ping trong PHP

Tôi muốn kiểm tra xem một trang web đang lên hay xuống ở một phiên bản cụ thể bằng cách sử dụng PHP. Tôi biết rằng curl sẽ lấy nội dung của tệp nhưng tôi không muốn đọc nội dung của trang web. Tôi chỉ muốn kiểm tra trạng thái của trang web. Có cách nào để kiểm tra tình trạng của trang web không? Chúng ta có thể sử dụng ping để kiểm tra trạng thái không? Tôi chỉ cần lấy các tín hiệu trạng thái như (404, 403, v.v.) từ máy chủ là đủ. Một đoạn mã nhỏ có thể giúp ích cho tôi rất nhiều.

  • php
  • curl
  • webserver
  • http-status-codes
  • ping

27 hữu ích 2 bình luận 67k xem chia sẻ

answer

49

Hướng dẫn dùng manual ping trong PHP

một cái gì đó như thế này sẽ hoạt động

    $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
    }

49 hữu ích 5 bình luận chia sẻ

answer

11

Hướng dẫn dùng manual ping trong PHP

curl -Is $url | grep HTTP | cut -d ' ' -f2

11 hữu ích 1 bình luận chia sẻ

answer

10

Hướng dẫn dùng manual ping trong PHP

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;

10 hữu ích 0 bình luận chia sẻ

answer

5

Hướng dẫn dùng manual ping trong PHP

Bạn đã thấy hàm get_headers () chưa? http://it.php.net/manual/en/ Chức năng.get-headers.php . Nó dường như làm chính xác những gì bạn cần.

Nếu bạn sử dụng curl trực tiếp với cờ -I, nó sẽ trả về tiêu đề HTTP (404, v.v.) thay vì HTML của trang. Trong PHP, tương đương là curl_setopt($ch, CURLOPT_NOBODY, 1);tùy chọn.

5 hữu ích 0 bình luận chia sẻ

answer

5

Hướng dẫn dùng manual ping trong PHP

Đây là cách tôi đã làm điều đó. Tôi đặt tác nhân người dùng để giảm thiểu khả năng mục tiêu cấm tôi và cũng vô hiệu hóa xác minh SSL vì tôi biết mục tiêu:

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);
}

5 hữu ích 0 bình luận chia sẻ

answer

4

Hướng dẫn dùng manual ping trong PHP

pingsẽ không thực hiện những gì bạn đang tìm kiếm - nó sẽ chỉ cho bạn biết liệu máy có hoạt động (và phản hồi ping) hay không. Tuy nhiên, điều đó không nhất thiết có nghĩa là máy chủ web đã hoạt động.

Bạn có thể muốn thử sử dụng phương thức http_head - nó sẽ truy xuất các tiêu đề mà máy chủ web gửi lại cho bạn. Nếu máy chủ đang gửi lại các tiêu đề, thì bạn biết nó đang hoạt động.

4 hữu ích 2 bình luận chia sẻ

answer

2

Hướng dẫn dùng manual ping trong PHP

Bạn không thể kiểm tra một máy chủ web pingbởi vì nó là một dịch vụ khác. Máy chủ có thể đang chạy, nhưng dù sao thì máy chủ web-daemon cũng có thể bị treo. Vì vậy, curl là bạn của bạn. Chỉ cần bỏ qua nội dung.

2 hữu ích 0 bình luận chia sẻ

Hướng dẫn dùng manual ping trong PHP

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Hướng dẫn dùng manual ping trong PHP