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 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
php 获取select下拉列表框的值
May 08 PHP
PHP学习之正则表达式
Apr 17 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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
2006/11/25 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
浅析Python数据处理
2018/05/02 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Django发送邮件功能实例详解
2019/09/02 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
Python 实现微信自动回复的方法
2020/09/11 Python
毕业生自荐书
2014/02/02 职场文书
丽江古城导游词
2015/02/03 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
护士旷工检讨书
2015/08/15 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
Python 中 Shutil 模块详情
2021/11/11 Python