使用PHP轻松监控你的网站运行状态

日期: 标签:phpWeb 40 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

预期准备

  1. 一个139邮箱,收到邮件后,可以免费给你短信提醒。如果你不需要短信提醒功能,用什么邮箱都可以
  2. 另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网搜搜。如果将PHP监控文件放到你自己的服务器上,这个监控文件也就等于摆设,服务器挂掉了,它也无法运行了,怎么能起到监控作用呢?

创建监控文件

     打开你喜欢的文本编辑器,新建一个PHP文件,命名为monitor.php。这部分代码也很简单,就是两个函数,一个用于测试服务器是否可以访问,另一个用于给你发送邮件通知

     复制粘贴以下代码至monitor.php文件:

<?php 
function check($host, $find) 
{
    $fp = fsockopen($host, 80, $errno, $errstr, 10);
    if (!$fp) 
    {
        echo "$errstr ($errno)\n";
    } else 
    {
       $header = "GET / HTTP/1.1\r\n";
       $header .= "Host: $host\r\n";
       $header .= "Connection: close\r\n\r\n";
       fputs($fp, $header);
       while (!feof($fp)) 
       {
           $str .= fgets($fp, 1024);
       }
       fclose($fp);
       return (strpos($str, $find) !== false);
    }
}

function alert($host) 
{
    /* 下面的youremail@139.com改成你的邮箱地址 */
    mail('youremail@139.com', 'Monitoring', $host.' down');
}

/* 下面的网址改成你要监控的网址 */
$host = 'www.ludou.org';

/* 下面的ludou.org改成你的网站首页源代码中的一段特殊字符串 */ 
$find = 'ludou.org';

if (!check($host, $find)) 
    alert($host);

?>

     第一个函数check(),需要传递两个参数:第一$host是你想要监控的网站(如:www.ludou.org);第二个$find用于查找你的网站首页源代码中的一段字符串,其实添加这个的目的是出于安全考虑,如果你的首页包含这段字符串,说明你的网页没有被修改(如:被骇客恶意修改)。

     如果你的网站无法访问或者安全字符串找不到,将会运行alert()函数,给你发送告警邮件。请确保你的监控主机可以正常使用PHP的发送邮件函数mail(),否则将无法发送邮件,替代方法是使用phpmailer

     好了,保存monitor.php,并上传至你的监控服务器上。

设置一个计划任务

     现在问题又来了,要想让monitor.php运行,我们得在浏览器中打开http://mymonitoringserver.com/monitor.php才能检测服务器状态,这样的监控也等于白搭。

     解决这个问题的办法是使用计划任务(Cron Job),大多数虚拟主机都提供了这个功能,它可以在你设定的时刻自动地运行php脚本(例如每小时运行一次monitor.php),关于计划任务的设定可根据各人的主机来设定,遇到问题可以联系主机的客服。

     设定好计划任务的运行时间间隔,还要设置计划任务的命令,这里提供一条样例:
lynx > /dev/null -dump http://mymonitoringserver.com/monitor.php

     如果你的主机不提供计划任务(Cron Job)的功能,这里给你推荐一个免费提供计划任务的网站,http://www.setcronjob.com/,申请一个账号,进行简单的设置就可以免费使用计划任务功能了。这里是一个功能预览,可以先练练手http://www.setcronjob.com/cp.php

后记

     到此本教程就结束,是不是感觉特麻烦呢?这么多代码,这么多设置,太麻烦了吧?确实有点,但是上面提供的是一种方法,一种原理,了解了解,练练手也没什么大不了的。其实有很多网站提供免费的网站监控功能,只需输入网址和邮箱地址就可以帮你监控网站了,你知道的话,能否给推荐个?

参考文章

How to easily monitor your web server using PHP

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/php-web-server-monitor.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

40 条留言

点此留言
  1. Ray

    似乎很有用处啊。

  2. 白银时代

    呃,空间如果被墙了,但是没有宕机,它好像不会提醒……

    • Ludou

      @白银时代 如果你的监控服务器是在国内的话,空间被屏蔽掉的话,是会提醒的!

  3. 落5秋

    请问一下博主, 复制粘贴以下代码至monitor.php文件:下边的那一段从01到38中的代码段是怎么实现的?谢谢~

    • Ludou

      @落5秋 fsockopen();使用该函数进行一次Internet连接,看是否可以连接上,如果连接不上,说明你的网站已经无法访问了;如果能够连接上,再检查网页中是否包含特定的字符串$find,找不到说明你的网页已经被修改!

      根据以上获得的信息,判断是否需要给你发送告警信息,使用到mail()函数。

      fsockopen的使用说明见php文档:
      http://php.net/manual/en/function.fsockopen.php

      mail的使用说明:
      http://php.net/manual/en/function.mail.php

      mail的中文文档:
      http://www.w3school.com.cn/php/func_mail_mail.asp

  4. 快乐岛博客

    这个强大!貌似用上以后就不用监控服务了,会省一些流量吧?

    • Ludou

      @快乐岛博客 这个跟监控服务的原理差不多。

      如果你的任务计划设置成每分钟执行一次,也会消耗一定流量的,这个监控php也要从你的首页下载html代码。

  5. 老衲

    老衲来好好看看

  6. 哈~Q

    安全问题很重要,数据很重要啊~

  7. 火车时刻表查询

    挺好玩的,问下:我的是美国L系统主机,是VPS 能否用你的代码?

    问题:特殊字符如何添加,是不是在首页的HEADER 这里加一行:

    <meta content="特殊内容" />

    能否指点下,谢了。

    • Ludou

      @火车时刻表查询 可以!只要你有两个web服务器就行,服务器的类型不限。

      特殊字符,可以是网页代码中原来已经有的,也可以按照你说的那样添加。

      你查看我的这个网页源代码,里面固定不变的代码有很多,如:
      <title>使用PHP轻松监控你的网站运行状态 – 露兜博客</title>

      这也是特殊字符,只要固定不变的字符就行。

  8. 达拉

    ludou你好.感觉你这个非常有实用价值. 我使用后遇到这样的问题,请教下是怎么回事.
    访问这个检测文件,显示Warning: fsockopen() has been disabled for security reasons in /www/users/我的URL.com/jiance.php on line 4 (). 是不是我的主机不支持fsockopen函数呢.
    2.访问后,邮件可以发出来. 但问题是,主机可以访问,也有特殊字符,但是都发邮件. 每次访问都发送邮件.
    3.这个是不是可以检测PHP文件呢,还是只可以检测html的. 我测试的两种,都发邮件.不知道为什么.请指点下.谢谢.

    • Ludou

      @达拉 1、你的主机不支持fsockopen函数,你可以换成pfsockopen试试
      2、PHP文件、html都可以检测

  9. 偶看

    现在用的是安全宝,还可以。

  10. 会声会影

    楼主,这个你可以用DNSPOD或者阿里云监控,这两个都是免费的,非常好用!

  11. 小林

    这个很有用啊,不知不觉就来到露兜这里了

  12. kslr

    get_headers获取后直接比对状态码,也是一个不错的办法

  13. 创唐志

    这是一个很棒的代码,打算拿去用用看。不过,这只能监控一个网站,如果是多个网站,代码要如何写呢?不会是一个网站一个php吧?这样感觉多了点,crontab设置也多。。

    • 露兜

      @创唐志 /* 下面的网址改成你要监控的网址 */
      $host1 = 'www.ludou.org';

      /* 下面的ludou.org改成你的网站首页源代码中的一段特殊字符串 */
      $find1 = 'ludou.org';

      if (!check($host1, $find1))
      alert($host1);

      /* 下面的网址改成你要监控的网址 */
      $host2 = 'www.ludou2.org';

      /* 下面的ludou.org改成你的网站首页源代码中的一段特殊字符串 */
      $find2 = 'ludou2.org';

      if (!check($host2, $find2))
      alert($host2);

  14. 随之长风

    看来要学的东西太多了!

  15. 嗯嗯

    楼主这个代码应该是监控自己网站的运行情况,如果我要监控别人的网站呢?比如某个新闻网站

    • 露兜

      @嗯嗯 用监控宝吧

      • 嗯嗯

        @露兜 大神,你的网站好奇怪啊,PC端都收不出来,只有移动端可以,监控宝可以监控别人的网站实时返回的页面信息吗?就是对面的新闻网站一发新文章我就能接收到

        • 露兜

          @嗯嗯 PC端收不出来是什么意思?在PC中打不开吗?
          你那不叫监控,叫订阅,如果新闻站提供feed订阅,你可以使用inoreader等工具进行订阅,具体上网搜索一下。

      • 嗯嗯

        @露兜 额,我主要想对交易平台和央行网站进行监控,一有消息就能收到是什么资讯的那种

        • 露兜

          @嗯嗯 那就只能自己写代码了,没有现成。这东西叫爬虫,需要定义的东西很多。如果功能不复杂,也可以付费给你搞一个。
          另外,我还是比较关心PC端收不出来是什么意思?露兜博客在PC中打不开吗?

        • 露兜

          @嗯嗯 另外,你可以试试这个,看看合不合你的需求:https://zaoshu.io/

      • 嗯嗯

        @露兜 谢谢大神,用PC端就是真的打不开你的博客

  16. 嗯嗯

    大神,就是你的博客在PC中打不开,我打开别的网站都可以,然后只能用移动端跟你请教问题实在不方便

    • 露兜

      @嗯嗯 能说说你的电脑的操作系统和使用的浏览器吗?
      估计你用的应该是Windows XP,可能会因为系统老旧https不支持。
      现在对服务器做了些调整,帮忙看看在PC是否可以访问。

  17. 嗯嗯

    大神你有用过PHP来做爬虫吗?

    • 露兜

      @嗯嗯 如,股票价格涨到多少钱提醒一下还是做过的。

  18. 嗯嗯

    哈哈哈,现在可以打开了,嗯是的,我用的是XP的,没有去换新系统

  19. 嗯嗯

    大神你的网站是用的国内服务器还是国外服务区呢?

  20. 嗯嗯

    大神你用的国内的服务器还是国外?

  21. jxyk2007

    PHP Warning: fsockopen(): ip不通就报错。网络正常的就正常。

发表留言