网址未正确显示在电子邮件模板中

时间:2019-02-26 15:21:04

标签: php html

我进行了以下设置,$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返回的方式,系统将显示两个徽章LIVEDOWN

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抽出的

1 个答案:

答案 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;

问题解决了!