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的bbs设计(三)
Oct 09 PHP
用php获取远程图片并把它保存到本地的代码
Apr 07 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
Jun 05 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
Jun 05 PHP
PHP中new static()与new self()的区别异同分析
Aug 22 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
JS 建立对象的方法
2007/04/21 Javascript
jquery ready函数源代码研究
2009/12/06 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js精度溢出解决方案
2012/12/02 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
JavaScript对象原型链原理解析
2020/01/22 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
Python3.5文件修改操作实例分析
2019/05/01 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
Ruby如何进行文件操作
2014/07/17 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
给学校的建议书
2014/03/12 职场文书
校本课程教学计划
2015/01/19 职场文书
银行给客户的感谢信
2015/01/23 职场文书
单位考核鉴定意见
2015/06/05 职场文书
JS class语法糖的深入剖析
2022/07/07 Javascript