我进行了以下设置,$url
来自
<td> <?php echo $row['url']?> </td>
然后通过curl
进行ping操作,该方法工作正常(加载时间长,但是其aprox。正在ping的160个站点)
<?php
$url = $row['url'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
} else {
echo "<td><span class='badge badge-danger'>DOWN</span></td>";
$path_to_file = './emailtemplate.html';
$file_contents = file_get_contents($path_to_file);
$file_contents = str_replace("depplaceholder","$url",$file_contents);
file_put_contents($path_to_file,$file_contents);
$to = "--";
$subject = "$url down";
$headers = "From:Deployment Monitor <-->" . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$message = file_get_contents('./emailtemplate.html');
mail($to,$subject,$message,$headers);
}
?>
根据ping返回的方式,系统将显示两个徽章LIVE
或DOWN
:
if (200==$retcode) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
} else {
echo "<td><span class='badge badge-danger'>DOWN</span></td>";
当ping与DOWN
一起返回时,如上面的代码所示,会自动发送一封电子邮件,这部分起作用,因为depplaceholder
中的emailtemplate.html
一词需要替换由$url
完成,因为第一个网站已关闭。
即电子邮件:
电子邮件1:Title: server 1 down
Body: server 1 down
电子邮件2:Title: server 2 down
Body: server 1 down
电子邮件3:Title: server 3 down
Body: server 1 down
由于某些原因,正文不会像标题一样发生变化,这是因为标题是从同一页面而不是从emailtemplate.html
抽出的
答案 0 :(得分:1)
好吧,由于评论太有限,我正在写一个完整的答案。
假设您在评论中说模板文件如下:
<body> <h1> depplaceholder is down </h1> </body>
因此,您打开该文件(称为./emailtemplate.html
),读取其内容并将其放在$file_contents
变量中。
这时,您将变量内的dapplaceholder
替换为$url
的内容。
$file_contents = str_replace("depplaceholder", $url, $file_contents);
然后您用
覆盖emailtemplate.html
file_put_contents($path_to_file,$file_contents);
这时,您将以emailtemplate.html
为正文的电子邮件发送出去。
然后您对其他服务器执行ping操作,然后加载模板,该模板此时(因为您已重写)包含了该模板
<body> <h1> 1 is down </h1> </body>
您尝试
$file_contents = str_replace("depplaceholder", $url, $file_contents);
但是您的文件中已经没有dapplaceholder
!所以这行实际上什么也没做!最后,您的邮件包含
<body> <h1> 1 is down </h1> </body>
永远,永远。
我希望我的观点现在明白了。
编辑:
关于如何解决此问题。除非您有必要保留电子邮件文本(在这种情况下,建议您将信息保存到数据库中),否则您必须意识到实际上不需要将任何内容保存到文件系统中。
所以就丢掉这一行
file_put_contents($path_to_file, $file_contents);
并更改将消息设置为的部分
$message = $file_contents;
问题解决了!