本文主要是介绍利用钉钉机器人和PHP开发一款免费的网站可用性检测工具,单节点版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
手里有几套系统正在运维,需要保障正常运行,所以可用性检测就必不可少啦,
以前本来是用的阿里官方的云监控,但现在价格感觉太贵了,不划算
那就自己手搓一个简易版的监控吧。
成品效果展示
代码展示
<?php
// 准备要检查的URL列表
$websites = ["官方网站" => "http://iiar.cn","测试站点" =>"https://test.dalezhi.cn",// 继续添加更多网站
];
// 各位要换成自己的钉钉机器人token哦
$dingding = "https://oapi.dingtalk.com/robot/send?access_token=****";foreach ($websites as $name => $url) {// 初始化cURL会话$ch = curl_init();// 设置cURL选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, true); // 获取头信息curl_setopt($ch, CURLOPT_NOBODY, true); // 仅获取头信息// 执行cURL请求curl_exec($ch);// 获取HTTP状态码$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);// 关闭cURL会话curl_close($ch);// 检查HTTP状态码if ($http_code == 200) {echo $name.'ok <br/>';} else {$data = ["text" => ["content" => $name.",无法访问 ".$url],"msgtype" => "text"];$jsonData = json_encode($data);// 初始化cURL会话$new_url = curl_init($dingding);// 设置cURL选项curl_setopt($new_url, CURLOPT_POST, true);curl_setopt($new_url, CURLOPT_RETURNTRANSFER, true);curl_setopt($new_url, CURLOPT_HTTPHEADER, ['Content-Type: application/json','Content-Length: ' . strlen($jsonData)]);curl_setopt($new_url, CURLOPT_POSTFIELDS, $jsonData);// 执行cURL请求并获取响应$response = curl_exec($new_url);curl_close($ch);}
}
?>
这段PHP代码的主要功能是检查一组网站的可访问性,如果某个网站无法访问,就向钉钉机器人发送警报。下面是对代码的详细解释:
<?php
// 准备要检查的URL列表
$websites = ["官方网站" => "http://iiar.cn","测试站点" =>"https://test.dalezhi.cn",// 继续添加更多网站
];
// 各位要换成自己的钉钉机器人token哦
$dingding = "https://oapi.dingtalk.com/robot/send?access_token=****";
- 代码首先定义一个关联数组
$websites
,其中键是网站的描述,值是网站的URL。 - 然后定义一个变量
$dingding
,保存钉钉机器人的API地址及其访问令牌。
foreach ($websites as $name => $url) {// 初始化cURL会话$ch = curl_init();
- 使用
foreach
循环遍历$websites
数组,每次循环提取一个网站的名称$name
和 URL$url
。 - 使用
curl_init()
初始化一个cURL会话。
// 设置cURL选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, true); // 获取头信息curl_setopt($ch, CURLOPT_NOBODY, true); // 仅获取头信息// 执行cURL请求curl_exec($ch);// 获取HTTP状态码$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);// 关闭cURL会话curl_close($ch);
- 使用
curl_setopt()
设置cURL选项:CURLOPT_URL
:设置要请求的URL。CURLOPT_RETURNTRANSFER
:将cURL执行结果返回为字符串,而不是直接输出。CURLOPT_HEADER
和CURLOPT_NOBODY
:只获取HTTP头信息,不获取内容。
- 使用
curl_exec()
执行cURL请求。 - 使用
curl_getinfo()
获取HTTP状态码。 - 使用
curl_close()
关闭cURL会话。
// 检查HTTP状态码if ($http_code == 200) {echo $name . ' ok <br/>';} else {$data = ["text" => ["content" => $name . ", 无法访问 " . $url],"msgtype" => "text"];$jsonData = json_encode($data);
- 检查HTTP状态码是否为200(表示请求成功)。
- 如果成功,输出网站名称和 ‘ok’。
- 如果不成功,准备发送到钉钉的消息内容,使用关联数组
$data
创建消息体,并将其编码为JSON格式。
// 初始化cURL会话$new_url = curl_init($dingding);// 设置cURL选项curl_setopt($new_url, CURLOPT_POST, true);curl_setopt($new_url, CURLOPT_RETURNTRANSFER, true);curl_setopt($new_url, CURLOPT_HTTPHEADER, ['Content-Type: application/json','Content-Length: ' . strlen($jsonData)]);curl_setopt($new_url, CURLOPT_POSTFIELDS, $jsonData);// 执行cURL请求并获取响应$response = curl_exec($new_url);curl_close($new_url);}
}
?>
- 再次初始化一个cURL会话,准备向钉钉发送POST请求。
- 设置cURL选项:
CURLOPT_POST
:设置为POST请求。CURLOPT_RETURNTRANSFER
:将响应结果返回为字符串。CURLOPT_HTTPHEADER
:设置HTTP头信息,包括内容类型和内容长度。CURLOPT_POSTFIELDS
:设置POST请求的内容,即之前编码的JSON数据。
- 执行cURL请求,发送消息到钉钉机器人。
- 关闭cURL会话。
当然 上面的步骤 只是写了一个检测流程,实际运行的时候 可以借助宝塔的定时任务,实现1分钟执行一次。
这篇关于利用钉钉机器人和PHP开发一款免费的网站可用性检测工具,单节点版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!