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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • php 判断服务器操作系统的类型

    一:php有许多系 统预定义变量,通过判断他们可以简单的判断服务器系统是 windows还是*unix, 其中相关的函数或者预定义变量如下:php_uname().PHP_OS.DIRECTORY_SEPARATOR.PHP_SHLIB_SUFFIX.PATH_SEPARATOR 二:实例: 复制代码 代码如下: <?php        if(strtolower(substr(PHP_OS, 0, 3)) == 'win'){            echo 'windows';      

  • 分享一段php获取linux服务器状态的代码

    简单的php获取linux服务器状态的代码,不多说-直接上函数: 复制代码 代码如下: function get_used_status(){  $fp = popen('top -b -n 2 | grep -E "^(Cpu|Mem|Tasks)"',"r");//获取某一时刻系统cpu和内存使用情况  $rs = "";  while(!feof($fp)){   $rs .= fread($fp,1024);  }  pclose($fp

  • php socket客户端及服务器端应用实例

    经常有朋友会对php的socket应用充满疑惑,本文就以实例代码作一讲解,希望能对初学php的朋友起到一点帮助作用 具体代码如下: 1.服务器端代码: <?php class SocketServer{ private $_port='9000'; private $_address='127.0.0.1'; private $_client_socket_list=array(); public function __set($name,$val){ $this--->$name=$val;

  • 监控php-fpm并自动重启服务的shell脚本

    脚本代码: 复制代码 代码如下: #!/bin/bash #变量初始化process="php-fpm" #进程名startCmd="/etc/init.d/php-fpm start" #启动命令down=0 while truedo    #取得http状态码    code=$(curl -H "Host:www.jb51.net" -m 5 -L -s -w %{http_code} http://127.0.0.1 -o /dev/nu

  • phpmailer在服务器上不能正常发送邮件的解决办法

    phpmailer本身是一个很不错的开源邮件类,也非常的易用简单,就是偶尔会出现程序上传到服务器上不能发送邮件的情况,在之前也有同学问过我这个问题,当时的时候总是不以为然,今天终于让我碰上了,用phpmailer 在本地测试正常,上传到服务器上就不行了,当然了是用的SMTP方式,最终确定是fsockopen 函数惹的祸,因为安全原因fsockopen 和pfsockopen 经常被服务器端关闭.解决方法如下: 而代之的应该是 stream_socket_client()函数,不过他的参数有一点不

  • 监控服务器swap并重启php的Shell脚本

    折中一下,写个脚本监控swap吧,放在crontab里面,2小时执行一次,世界安静了,再也没有烦人的报警短信了 复制代码 代码如下: #!/bin/bash function usage {         echo "Usage: $0"         echo "e.g. $0 1500"         exit } if [ $# -lt 1 ];then         usage fi typeset -i nowSwap limitSwap limi

  • PHP获取服务器端信息的方法

    本文实例讲述了PHP获取服务器端信息的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: /**  * 获取系统信息  *  * @return array  */ function getSystemInfo() {  $systemInfo = array();    // 系统  $systemInfo['os'] = PHP_OS;    // PHP版本  $systemInfo['phpversion'] = PHP_VERSION;    // Apache版本

  • 通过PHP CLI实现简单的数据库实时监控调度

    要实现的功能:监控user表,若有新纪录增加,将其向user2表中添加.(实际应用上可以引深一些,例如对数据进行相关处理等) 下面是PHP代码(dbtest.php) 复制代码 代码如下: !#/usr/local/php/bin/php <?php mysql_connect('localhost', 'username', 'password'); mysql_select_db("test"); echo 'PID: '.posix_getpid().' '; //当前进程

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

    本文实例讲述了PHP实现服务器状态监控的方法.分享给大家供大家参考.具体分析如下: PHP服务器状态监控对于很多朋友来讲都没做,只有看到网站挂了才知道,这种半夜网站关了是不知道情况了,对于网站也非常不好,为此这两天抽空写了个网页服务器状态监控,看到有朋友说需要,那我就放出来吧.很简单的东西. 使用方法: 打开压缩包里面的status.php文件.编辑这里的内容为你自己的邮箱信息.代码如下: 复制代码 代码如下: $mail->Host       = 'smtp.exmail.qq.com'; 

  • shell脚本实现服务器进程监控的方法

    写作背景: 项目是基于java.weblogic及timer的处理模式,每次服务部署之后timer的整体状态是一个盲区,因为100多个进程,是否有启动遗漏或者启动重复的,想做到一目了然是件困难的事情.所以我考虑用shell脚本的文件查找与匹配方法来解决这个问题,简单记录下,仅供参考. 程序说明: 1)通过将系统定义的进程(timer)配置到配置文件process_signal.config中 2)将服务器当前所有的java进程存储到process_current.txt中 3)逐行读取proce

  • Jmeter压力测试简单教程(包括服务器状态监控)

    目录 步骤一  安装Jmeter 步骤二  使用Jmeter测试未登录页面 步骤三  设置线程并发数 步骤四  设置其他监听器 步骤五  登录测试 步骤六  会话保持 步骤七  文件读取网址 步骤八  服务器状态实时监听     前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主要目的是测试负载均衡的实现效果.不知道是不是因为Jmeter不如loadRunner火爆还是什么,网上关于Jmeter的资料有很多但是大多千篇一律,要么简单弄个页面测试一下,要么全篇都是介绍很多和J

  • Nginx服务状态监控的方法

    在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: 复制代码 代码如下: [root@ihxb123Z nginx]# ./nginx -V (V大写会显示版本号和模块等信息.v小写仅显示版本信息. 如果已经安装,会在显示的信息中包含 --with-http_stub_status_module信息.如果没有此模块,需要重新安装,编译命令如下: ./c

  • 如何监控 Linux 服务器状态的方法

    Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此.为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展. 本文介绍的几个命令,不仅仅适用于服务器监控,也适用于我们日常情况下的开发. 1. watch watch 命令我们的使用频率很高,它的基本作用是,按照指定频率重复执行某一条指令.使用这个命令,我们可以重复调用一些命令来达到监控服务器的作用. 默认情况下,watch 命令的执行周期是 2 秒,但我们可以使用 -n 选项来指定运行频率,比如我们想

  • 如何监控 Linux 服务器状态

    Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此.为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展. 本文介绍的几个命令,不仅仅适用于服务器监控,也适用于我们日常情况下的开发. 1. watch watch 命令我们的使用频率很高,它的基本作用是,按照指定频率重复执行某一条指令.使用这个命令,我们可以重复调用一些命令来达到监控服务器的作用. 默认情况下,watch 命令的执行周期是 2 秒,但我们可以使用 -n 选项来指定运行频率,比如我们想

  • Zabbix添加Node.js监控的方法

    目前网上已有 pm2-zabbix 工具可以实现Zabbix对Node.js的监控报警,Github地址. 特征: 自动发现通过PM2管理的Node.js进程. 报告Nodes.js进程状态.CPU占用率.内存占用以及进程是否重启. 监控PM2守护进程自身状态.资源占用和PID改变. 已提供易于安装的Zabbix监控项模板. 1.Node.js服务器安装 pm2-zabbix npm install -g pm2-zabbix 测试自动发现功能是否正常: pm2-zabbix --discove

  • 使用python进行服务器的监控

    在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的:百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统: Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的./proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息

  • Python实现Linux监控的方法

    工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的./proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数).与其他文件系统不同,/proc 存在于内存而不是硬盘中.proc 文件系

  • Nginx状态监控以及日志分析详解

    1.Nginx状态监控 Nginx提供了一个内置的状态信息监控页面可用于监控Nginx的整体访问情况,这个功能由ngx_http_stub_status_module模块进行实现. 使用nginx -V 2>&1 | grep -o with-http_stub_status_module命令检测当前Nginx是否有status功能,如果输出ngx_http_stub_status_module则说明是有的,如果没有可以在编译时加上此模块. 默认情况下,status是关闭的,我们需要开启,并

随机推荐