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 相关文章推荐
php创建多级目录代码
Jun 05 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
php通过记录IP来防止表单重复提交方法分析
Dec 16 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 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图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
javascript 写类方式之四
2009/07/05 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
详解Python中的日志模块logging
2015/06/19 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python数据存储之 h5py详解
2019/12/26 Python
商务日语专业毕业生求职信
2013/10/26 职场文书
校园安全检查制度
2014/02/03 职场文书
创业计划书如何编写
2014/02/06 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
初中班主任教育随笔
2015/08/15 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
Hive日期格式转换方法总结
2022/06/25 数据库