最近服务器经常宕机,很多项目在服务器上,但又不能及时预警,严重影响正常使用。
写了个小脚本用来检测指定页面是否可以打开,并且发送邮件提醒
只要功能
1、设置指定网址,每隔多久可以检测一次设置的Url是否返回状态码200或者301,如果是的不执行任何操作,如果返回非200或者301,就会发送到指定邮箱,及时通知到自己手里,以应对处理。
用到了PHPMailer这个库,需要自己下载到本地,下载地址:https://github.com/PHPMailer/PHPMailer/
定时任务用到的宝塔环境的计划任务,然后选择访问url任务,把写好的代码地址输入进去,配置好间隔时间即可
代码如下
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true); // Passing true
enables exceptions
try {
//服务器配置
$mail->CharSet ="UTF-8"; //设定邮件编码
$mail->SMTPDebug = 0; // 调试模式输出
$mail->isSMTP(); // 使用SMTP
$mail->Host = 'smtp.qq.com'; // SMTP服务器
$mail->SMTPAuth = true; // 允许 SMTP 认证
$mail->Username = '*'; // SMTP 用户名 即邮箱的用户名
$mail->Password = '*'; // SMTP 密码 部分邮箱是授权码(例如163邮箱)
$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议
$mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持
$mail->setFrom('*', 'Mailer'); //发件人
$mail->addAddress('*', 'Joe'); // 收件人
//$mail->addAddress('*'); // 可添加多个收件人
$mail->addReplyTo('*', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
//$mail->addCC('cc@example.com'); //抄送
//$mail->addBCC('bcc@example.com'); //密送
//发送附件
// $mail->addAttachment('../xy.zip'); // 添加附件
// $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名
//Content
$mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容
$mail->Subject = '异常异常';
$mail->Body = '<h1>异常提醒</h1>' . date('Y-m-d H:i:s');
$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';
} catch (Exception $e) {
echo '邮件发送失败: ', $mail->ErrorInfo;
}
$url ='http://baidu.com';
function get_http_code($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); //设置URL
curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header
curl_setopt($curl, CURLOPT_NOBODY, true); //Body就不要了吧,我们只是需要Head
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧,别给我直接输出到屏幕了
$data = curl_exec($curl); //开始执行啦~
$return = curl_getinfo($curl, CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
curl_close($curl); //用完记得关掉他
return $return;
}
$codea = get_http_code($url);
echo get_http_code($url);
if($codea == '301' || $codea =='200'){
echo('页面正常');
}else {
$mail->send();
echo '邮件发送成功';
// echo('页面访问异常');
}
?>