使用PHP轻松监控你的网站运行状态
预期准备
- 一个139邮箱,收到邮件后,可以免费给你短信提醒。如果你不需要短信提醒功能,用什么邮箱都可以
- 另外一个可以运行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
似乎很有用处啊。
@Ray 似乎有点。
呃,空间如果被墙了,但是没有宕机,它好像不会提醒……
@白银时代 如果你的监控服务器是在国内的话,空间被屏蔽掉的话,是会提醒的!
请问一下博主, 复制粘贴以下代码至monitor.php文件:下边的那一段从01到38中的代码段是怎么实现的?谢谢~
@落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
这个强大!貌似用上以后就不用监控服务了,会省一些流量吧?
@快乐岛博客 这个跟监控服务的原理差不多。
如果你的任务计划设置成每分钟执行一次,也会消耗一定流量的,这个监控php也要从你的首页下载html代码。
老衲来好好看看
安全问题很重要,数据很重要啊~
@哈~Q 那是!
挺好玩的,问下:我的是美国L系统主机,是VPS 能否用你的代码?
问题:特殊字符如何添加,是不是在首页的HEADER 这里加一行:
<meta content="特殊内容" />
能否指点下,谢了。
@火车时刻表查询 可以!只要你有两个web服务器就行,服务器的类型不限。
特殊字符,可以是网页代码中原来已经有的,也可以按照你说的那样添加。
你查看我的这个网页源代码,里面固定不变的代码有很多,如:
<title>使用PHP轻松监控你的网站运行状态 – 露兜博客</title>
这也是特殊字符,只要固定不变的字符就行。
@Ludou 明白,感谢。
ludou你好.感觉你这个非常有实用价值. 我使用后遇到这样的问题,请教下是怎么回事.
访问这个检测文件,显示Warning: fsockopen() has been disabled for security reasons in /www/users/我的URL.com/jiance.php on line 4 (). 是不是我的主机不支持fsockopen函数呢.
2.访问后,邮件可以发出来. 但问题是,主机可以访问,也有特殊字符,但是都发邮件. 每次访问都发送邮件.
3.这个是不是可以检测PHP文件呢,还是只可以检测html的. 我测试的两种,都发邮件.不知道为什么.请指点下.谢谢.
@达拉 1、你的主机不支持fsockopen函数,你可以换成pfsockopen试试
2、PHP文件、html都可以检测
现在用的是安全宝,还可以。
楼主,这个你可以用DNSPOD或者阿里云监控,这两个都是免费的,非常好用!
这个很有用啊,不知不觉就来到露兜这里了
get_headers获取后直接比对状态码,也是一个不错的办法
这是一个很棒的代码,打算拿去用用看。不过,这只能监控一个网站,如果是多个网站,代码要如何写呢?不会是一个网站一个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);
看来要学的东西太多了!
楼主这个代码应该是监控自己网站的运行情况,如果我要监控别人的网站呢?比如某个新闻网站
@嗯嗯 用监控宝吧
@露兜 大神,你的网站好奇怪啊,PC端都收不出来,只有移动端可以,监控宝可以监控别人的网站实时返回的页面信息吗?就是对面的新闻网站一发新文章我就能接收到
@嗯嗯 PC端收不出来是什么意思?在PC中打不开吗?
你那不叫监控,叫订阅,如果新闻站提供feed订阅,你可以使用inoreader等工具进行订阅,具体上网搜索一下。
@露兜 额,我主要想对交易平台和央行网站进行监控,一有消息就能收到是什么资讯的那种
@嗯嗯 那就只能自己写代码了,没有现成。这东西叫爬虫,需要定义的东西很多。如果功能不复杂,也可以付费给你搞一个。
另外,我还是比较关心PC端收不出来是什么意思?露兜博客在PC中打不开吗?
@嗯嗯 另外,你可以试试这个,看看合不合你的需求:https://zaoshu.io/
@露兜 谢谢大神,用PC端就是真的打不开你的博客
大神,就是你的博客在PC中打不开,我打开别的网站都可以,然后只能用移动端跟你请教问题实在不方便
@嗯嗯 能说说你的电脑的操作系统和使用的浏览器吗?
估计你用的应该是Windows XP,可能会因为系统老旧https不支持。
现在对服务器做了些调整,帮忙看看在PC是否可以访问。
大神你有用过PHP来做爬虫吗?
@嗯嗯 如,股票价格涨到多少钱提醒一下还是做过的。
哈哈哈,现在可以打开了,嗯是的,我用的是XP的,没有去换新系统
大神你的网站是用的国内服务器还是国外服务区呢?
大神你用的国内的服务器还是国外?
@嗯嗯 国内的服务器
PHP Warning: fsockopen(): ip不通就报错。网络正常的就正常。