PHP实现服务器状态监控的方法


Posted in PHP onDecember 09, 2014

本文实例讲述了PHP实现服务器状态监控的方法。分享给大家供大家参考。具体分析如下:

PHP服务器状态监控对于很多朋友来讲都没做,只有看到网站挂了才知道,这种半夜网站关了是不知道情况了,对于网站也非常不好,为此这两天抽空写了个网页服务器状态监控,看到有朋友说需要,那我就放出来吧。很简单的东西。

使用方法:

打开压缩包里面的status.php文件。编辑这里的内容为你自己的邮箱信息。代码如下:

$mail->Host       = 'smtp.exmail.qq.com';      // SMTP 服务器

$mail->Port       = 25;   // SMTP服务器的端口号

$mail->Username   = 'admin@xxx.com';  // SMTP服务器用户名

$mail->Password   = 'password';            // SMTP服务器密码

$mail->SetFrom('admin@xxx.com','Status');

$mail->AddReplyTo('admin@xxx.com','Status');

$mail->Subject    = $subject;

$mail->AltBody    = 'To view the message, please use an HTML compatible email viewer!'; // optional, comment out and test

$mail->MsgHTML($body);

$address = 'admin@admin.com';   //接收邮箱

//更改这里的内容为你要监控的IP:

$server_ip_list = array(

'61.135.169.121',

'221.204.173.200',

'173.194.127.83'

);

然后访问你http://yourdomain.com/status.php文件,即可看到当前服务器状态并且自动发送邮件到你设置的邮箱。如果需要自动监控,请添加Cron任务或者使用什么监控宝之类的!
完整代码如下:
<?php

/*

 * 服务器状态监控

 */

header('Content-type:text/html;charset=utf-8');

include './smtp/class.smtp.php';

include './smtp/class.phpmailer.php';

function sendmail($subject = '',$body = '') {

    date_default_timezone_set('Asia/Shanghai');//设定时区东八区

    $mail             = new PHPMailer(); //new一个PHPMailer对象出来

    // $body            = eregi_replace("[]",'',$body); //对邮件内容进行必要的过滤

    $mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码

    $mail->IsSMTP(); // 设定使用SMTP服务

    $mail->SMTPAuth   = true;                  // 启用 SMTP 验证功能

    $mail->Host       = 'smtp.exmail.qq.com';      // SMTP 服务器

    $mail->Port       = 25;   // SMTP服务器的端口号

    $mail->Username   = 'admin@xxx.com';  // SMTP服务器用户名

    $mail->Password   = 'password';            // SMTP服务器密码

    $mail->SetFrom('admin@xxx.com','Status');

    $mail->AddReplyTo('admin@xxx.com','Status');

    $mail->Subject    = $subject;

    $mail->AltBody    = 'To view the message, please use an HTML compatible email viewer!'; // optional, comment out and test

    $mail->MsgHTML($body);

    $address = 'admin@admin.com'; //接收邮箱

    $mail->AddAddress($address, '');

    //$mail->AddAttachment("images/phpmailer.gif");      // attachment  附件

    //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

    if(!$mail->Send()) {

        echo 'Mailer Error: ' . $mail->ErrorInfo;

    } else {

         // echo "Message sent!恭喜,邮件发送成功!";

    }

}

//check server status

function checkServerSatatus($ip) {

 $str = null;

 $fp = @fsockopen($ip,80,$errno,$errstr,10);

 if (!$fp) {

  return false;

 } else {

  fclose($fp);

  return true;

 }

}

$server_ip_list = array(

       '61.135.169.121',

       '221.204.173.200',

       '173.194.127.83'

      );

?>

<!doctype html>

<html lang="zh_CN">

<head>

 <meta charset="UTF-8">

 <title>服务器状态监控</title>

 <style>

 * {

  margin: 0px;

  padding: 0px;

 }

 body {

  font-family: "Microsoft yahei",Arial;

  font-size:14px;

 }

 header {

  height: 40px;

  background-color: #2e2e2e;

  width: 100%;

  line-height: 35px;

 }

 header > h3 {

  color: #fff;

  margin-left: 20px;

 }

 footer {

  text-align: center;

 }

 a {

  color: #424242;

  text-decoration: none;

 }

 .wrap {

  height: auto;

  zoom:1;

  overflow: auto;

  max-width: 500px;

  width: 100%;

  margin: 50px auto;

 }

 .table {

  border-collapse: collapse;

  border: 1px solid #eee;

  width: 100%;

 }

 tr,td{

  color: #424242;

  border-collapse: collapse;

  border: 1px solid #F0F0F0;

  height: 30px;

  text-align: center;

 }

 tr:nth-child(2n+1) {

  background-color: #F7F8FC;

 }

 tr:hover {

  background-color: #F7F8FC;

 }

 .online,.offline {

  height: 20px;

  background-color: #2ECC71;

  width: 40px;

  margin: 0px auto;

  -webkit-border-radius: 5px;

  -moz-border-radius: 5px;

  border-radius: 5px;

  color: #fff;

 }

 .offline {

  width: 50px;

  background-color: #E74C3C;

 }

 </style>

</head>

<body>

 <header>

  <h3>服务器在线状态监控</h3>

 </header>

 <div class="wrap">

  <table class="table">

   <tbody>

    <tr><td>ID</td><td>Location</td><td>Address</td><td>Status</td></tr>

    <?php 

     $i = 0;

     foreach ($server_ip_list as $key => $val) {

      $api = file_get_contents('http://ip.taobao.com/service/getIpInfo.php?ip='.$server_ip_list[$key].'');

      $json = json_decode($api);

      $result = $json->data;

      $i++;

      if (checkServerSatatus($server_ip_list[$key])) {

       echo "<tr><td>{$i}</td><td>{$result->country}{$result->region}{$result->city}</td><td>{$server_ip_list[$key]}</td><td><div class="online">在线</div></td></tr>";

      } else {

       echo "<tr><td>{$i}</td><td>{$result->country}{$result->region}{$result->city}</td><td>{$server_ip_list[$key]}</td><td><div class="offline">不在线</div></td></tr>";

       $subject = "您的服务器 {$server_ip_list[$key]} 无法访问!";

       $body = "您的服务器{$server_ip_list[$key]} 无法访问,此邮件根据你设置的监控频率发送,当服务器恢复正常邮件自动停止发送!";

       sendmail($subject,$body);

      }

     }

     ?>

   </tbody>

  </table>

 </div>

 

</body>

</html>

注意:
include './smtp/class.smtp.php';
include './smtp/class.phpmailer.php';
文件可以下载phpmailer包然后我们在包里面这两个文件复制出来然后即可使用了。

ps:这个只是一个非常的简单的不能很好的监控到服务器了,现在有很多成熟的免费产品都可以更好的达到我们要求,如dnspod里面有一个D监控了,然后我们就可以操作。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
深入理解PHP中的global
Aug 19 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php程序内部post数据的方法
Mar 31 PHP
PHP中JSON的应用技巧
Oct 10 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 #PHP
php实现MySQL数据库备份与还原类实例
Dec 09 #PHP
两个php日期控制类实例
Dec 09 #PHP
php中Ctype函数用法详解
Dec 09 #PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 #PHP
thinkphp缓存技术详解
Dec 09 #PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 #PHP
You might like
php公用函数列表[正则]
2007/02/22 PHP
PHP防止跨域提交表单
2013/11/01 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
layui前端时间戳转化实例
2019/11/15 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
python显示天气预报
2014/03/02 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python GUI计算器的实现
2020/10/09 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
毕业生的自我鉴定
2013/10/29 职场文书
护士节策划方案
2014/05/19 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
银行求职信范文
2019/05/13 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android