Chào anh em, Mạn phép chia sẻ với anh em đoạn code php cùi mía của em, dùng để kiểm tra server có bị down hay không và gửi mail thông báo nếu bị lỗi. Cách triển khai như sau : Tạo thư mục tùy ý trên máy chủ hoặc 1 host riêng (phải ổn định) Tạo file .php với nội dung là đoạn code của em bên dưới Tạo "domains.txt", với mỗi IP hoặc domain (hợp lệ - có thể dùng # ở trước để ghi chú) trên 1 dòng Tùy chỉnh chức năng gửi mail bằng cách tải PHP Mailer và tùy chỉnh trong file .php từ dòng 140 - 147 Tạo Crobjon đến file .php vừa tạo ở trên. Thời gian kiểm tra có thể để từ 30 - 60 phút tùy ý Code tham khảo, anh em góp ý hoặc có tool thì chia sẻ để mọi người học hỏi thêm nhé! Tks anh em! PHP: <?php@set_time_limit(-1);@date_default_timezone_set('Asia/Bangkok');if (!headers_sent()){ header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0, post-check=0, pre-check=0'); header('Pragma: no-cache'); header('Expires: 0');}/*** Kiểm tra url "vẫn còng sống" nếu HTTP CODE trả về : 200, 301, 302, 403, 404* @return : true | false*/function check_url_live($url = ''){ $response = array('http_code' => 0); if ($ch = @curl_init()) { $curl_setopt_array = array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => 30, CURLOPT_MAXREDIRS => 10, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', CURLOPT_AUTOREFERER => false, CURLOPT_HTTPHEADER => array('Cache-Control: no-cache'), CURLOPT_FRESH_CONNECT => true, CURLOPT_HEADER => false, CURLOPT_NOBODY => true, CURLOPT_CUSTOMREQUEST => 'HEAD', ); $curl_setopt_array[CURLOPT_ENCODING] = ''; curl_setopt_array($ch, $curl_setopt_array); @curl_exec($ch); $response = @curl_getinfo($ch); @curl_close($ch); unset($ch); } $http_code = (!empty($response['http_code'])) ? (intval($response['http_code'])) : (0); return (($http_code == 200) || ($http_code == 301) || ($http_code == 302) || ($http_code == 403) || ($http_code == 404));}/*** Kiểm tra server theo IP hoặc tên miền có bị down* Kiểm tra tối đa 3 lần liên tiếp nếu bị down* @return true (vẫn sống, hoặc ip / tên miền sai định dạng thì bỏ qua) | string (là tên miền nếu false)*/function check_server_live($domain = '', $max = 3){ if (preg_match('/^(?:[a-z0-9\-]+\.)+[a-z]{2,6}$/i', $domain) || preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $domain)) { $false = 0; for ($i = 0; $i < $max; $i++) { if (false === check_url_live("http://{$domain}")) { $false++; sleep(1); } else { break; } } if ($false >= $max) { return $domain; } } return true;}/*** Lấy danh dách IP / tên miền từ file "domains.txt" để kiểm tra*/$lines = array_map('trim', array_unique(array_filter(file('domains.txt'))));if (!empty($lines)){ $err = array(); foreach ($lines as $line) { $check = check_server_live($line); if ((!empty($check)) && (is_string($check))) { $err[] = $check; } } if (!empty($err)) { $list = sprintf('<b>%s</b>', implode('</b>, <b>', $err)); $mail_body = sprintf('<div style="font-family:Tahoma,Arial,sans-serif;font-size:16px;line-height:24px">Chào quản trị viên,<br/>Hệ thống đã phát hiện lỗi truy cập đến %s vào %s. Vui lòng kiểm tra và khắc phục lỗi!<br /><span style="font-size:11px;font-style:italic;color:#CC0000">* Nếu lỗi đã được khắc phục, vui lòng bỏ qua cảnh báo này!</span><br /><span style="font-size:11px;font-style:italic;color:#CC0000">* Đây là hệ thống mail tự động, vui lòng không phản hồi!</span><br />.</div>', $list, date('H:i d/m/Y')); // TÙY CHỈNH GỬI MAIL Ở ĐÂY // api_send_mail(array( // 'to' => '[email protected]', // 'subject' => sprintf('BÁO LỖI TRUY CẬP %s', date('H:i d/m/Y')), // 'message' => $mail_body, // 'name' => 'Server Down Warning', // )); } print_r($err);}/*** EOF*/
App uptimerobot có hết rồi bạn. Đừng cố phát minh lại cái bánh xe. Còn nếu bạn cần tự động hoá gì đó khi server gặp vấn đề thì hãy viết script.
Tks bác, em mới biết món này! Em có nói "để trên máy chủ hoặc 1 host riêng (phải ổn định)" mà bác Kiến thức hạn hẹp, bác @Hoa Mãn Lâu xóa hộ em cái thớt, để tốn tài nguyên quá
đây là ý tưởng tốt. nếu làm chủ nhiều server sẽ tự cấu hình check quản trị theo ý mình. còn uptime robot dành cho người it server.