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:风雨欲来 路在何方?
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
PHP 截取字符串专题集合
Aug 19 PHP
php 函数中使用static的说明
Jun 01 PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 PHP
dedecms中使用php语句指南
Nov 13 PHP
Laravel 5 学习笔记
Mar 06 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 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 filter_var() 函数 Filter 函数
2012/04/25 PHP
php判断是否为json格式的方法
2014/03/04 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
django框架防止XSS注入的方法分析
2019/06/21 Python
python分布式计算dispy的使用详解
2019/12/22 Python
python3 logging日志封装实例
2020/04/08 Python
python3.7调试的实例方法
2020/07/21 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
小学班主任评语
2014/12/29 职场文书
委托书范本格式
2019/04/18 职场文书