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
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
curl -Is $url | grep HTTP | cut -d ' ' -f2
11 hữu ích 1 bình luận chia sẻ
answer
10
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["//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
Bạn đã thấy hàm get_headers [] chưa? //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
Đâ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
ping
sẽ 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
Bạn không thể kiểm tra một máy chủ web ping
bở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ẻ