加入收藏 | 设为首页 | 会员中心 | 我要投稿 驾考网 (https://www.jiakaowang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

通过 PHP做主机故障检测,并发送电子邮件

发布时间:2023-06-05 13:30:09 所属栏目:PHP教程 来源:
导读:这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够ping通主机,如果不通发送mail,这只是我能想到的办法,有大神如果能想到更好的检测办法,不吝赐教!

OK,废话少说,翠花,上代码!

(ps:代码
这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够ping通主机,如果不通发送mail,这只是我能想到的办法,有大神如果能想到更好的检测办法,不吝赐教!

OK,废话少说,翠花,上代码!

(ps:代码中用到了PHPMailer,参考的人,请下载打包代码吧~)

<?PHP  

/** 

 * 检测主机宕机脚本,每10秒检测一次 

 * 若主机宕机会发送邮件通知,发送邮件的间距时间为1小时 

 */  

set_time_limit(0);  

define('ROOT',dirname(__FILE__) . DIRECTORY_SEParaTOR);  

// 检测的IP地址  

$ipAddress = '45.33.36.121';  

// 保存发送mail的时间的文件  

$file = ROOT . 'sendMailTime.txt';  

// 创建文件  

file_put_contents($file,0);  

if (file_exists($file)) {  

    // 看清楚,这里是无限循环哦  

    while (true) {  

        // ping SinoAngel主机  

        $hostStatus = pingAddress($ipAddress);  

        if (!$hostStatus) {  

            $lastTime = (int) file_get_contents($file);  

            // 距离上次超过一个小时就发送宕机邮件  

            if (time() - $lastTime > 3600) {  

                $row = sendMail([  

                    'subject' => "{$ipAddress}主机宕机警告", 

                    'body' => "dear,{$ipAddress}主机已经宕机,请知晓,发送时间:" . date('Y-m-d H:i:s'), 

                    'address' => [  

                        [  

                            'name' => 'Stronger', 

                        ], 

                        [  

                            'name' => '李星', 


                        ]  

                    ]  

                ]);  

                if ($row) {  

                    file_put_contents($file,time());  

                }  

            }  

        }  

        sleep(10);  

    }  

} else {  

    exit("fail");  

}  

/** 

 * 发送邮件 

 * @param type $config 

 * @return boolean 

 */  

function sendMail($config = []) {  

    require ROOT . 'PHPMailer/PHPMailerAutoload.PHP';  

    $mail = new PHPMailer;  

    $mail->isSMTP();                                      // 设置邮件使用SMTP  

    $mail->Host = 'smtp.qq.com';                          // 邮件服务器地址  

    $mail->SMTPAuth = true;                               // 启用SMTP身份验证  

    $mail->CharSet = "UTF-8";                             // 设置邮件编码  

    $mail->setLanguage('zh_cn');                          // 设置错误中文提示  

    $mail->Username =           // SMTP 用户名,即个人的邮箱地址  

    $mail->Password = 'ss123456';                         // SMTP 密码,即个人的邮箱密码  

    $mail->SMTPSecure = 'tls';                            // 设置启用加密,注意:必须打开 PHP_openssl 模块  

    $mail->Priority = 1;                                  // 设置邮件优先级 1:高,3:正常(默认),5:低  

    $mail->From =               // 发件人邮箱地址  

    $mail->FromName = 'SinoAngel-Server';                 // 发件人名称  

    if (!isset($config['address']) || empty($config['address'])) {  

        return false;  

    }  

    // 收件人  

    $address = $config['address'];  

    if (isset($address['name']) && isset($address['email'])) {  

        if (empty($address['name']) || empty($address['email'])) {  

            return false;  

        }  

        $mail->addAddress($address['email'],$address['name']);  // 收件人  

    } else {  

        foreach ($address as $addKey => $addVal) {  

            if (!empty($addVal['email']) && !empty($addVal['name'])) {  

                $mail->addAddress($addVal['email'],$addVal['name']);  // 收件人  

            }  

        }  

    }  

    $mail->WordWrap = 50;                                 // 设置自动换行50个字符  

    // 添加附件  

    if (isset($config['file']) && !empty($config['file'])) {  

        if (is_string($config['file'])) {  

            $mail->addAttachment($config['file']);  

        } elseif (is_array($config['file']) && !empty($config['file'])) {  

            foreach ($config['file'] as $file) {  

                $mail->addAttachment($file);  

            }  

        }  

    }  

    $mail->isHTML(true); // 设置邮件格式为HTML  

    // 主题  

    if (isset($config['subject']) && !empty($config['subject'])) {  

        $mail->Subject = $config['subject'];  

    }  

    // 主体内容  

    if (isset($config['body']) && !empty($config['body'])) {  

        $mail->Body = $config['body'];  

    }  

    return $mail->send();  

}  

/** 

 * 使用PHP检测能否ping通IP或域名 

 * @param type $address 

 * @return boolean 

 */  

function pingAddress($address) {  

    $status = -1;  

    if (strcasecmp(PHP_OS,'WINNT') === 0) {  

        // Windows 服务器下  

        $pingresult = exec("ping -n 1 {$address}",$outcome,$status);  

    } elseif (strcasecmp(PHP_OS,'Linux') === 0) {  

        // Linux 服务器下  

        $pingresult = exec("ping -c 1 {$address}",$status);  

    }  

    if (0 == $status) {  

        $status = true;  

    } else {  

        $status = false;  

    }  

    return $status;  

}  

(编辑:驾考网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章