如何使用自定义 html 消息在出错时退出 php

Posted

技术标签:

【中文标题】如何使用自定义 html 消息在出错时退出 php【英文标题】:How can I exit php upon error with a custom html message 【发布时间】:2019-05-31 13:24:10 【问题描述】:

我想知道退出 php 脚本(如果遇到错误)的最佳方式是什么,我还包括我的所有 html 代码。目前我的脚本是:

<?php

    // Some other code here

    // These if statements are my error handling
    if(!isset($var)) 
        $message = 'Var is not set'
        exit('<title>Error Page</title>'.$message.'<footer>Test Footer</foot>');
    

    if($a != $b) 
        $message = 'a is not equal to b';
        exit('<title>Error Page</title>'.$message.'<footer>Test Footer</foot>');
    

    $success = 'YAY, we made it to the end';
?>

<html>
    <header>
        <title>YAY</title>
        <!-- Other stuff here -->
    </header>
    <!-- Other stuff here -->
    <body>
    <!-- Other stuff here -->
    <?php echo $success ?>
    <!-- Other stuff here -->
    </body>
    <!-- Other stuff here -->
    <footer>The best footer</footer>
</html>

你可以看到我的退出消息的风格很糟糕(因为我把所有的 html 都塞在那里)。有没有一种方法可以让我有一个很好的 html 错误页面来显示自定义消息。

【问题讨论】:

但是你为什么要退出你的脚本呢?我可以看到你在 HTML 的上下文中运行它,所以你几乎不应该用退出来终止脚本 @Dharman 好吧,这是一个示例脚本,但退出的目的是因为我们遇到了错误,所以我想退出并显示一个漂亮的 html 格式的错误消息。您对处理错误有什么建议? 您还想打印底部的 html 部分吗?如果没有,那么您可以在if 中使用echo "your html code"; exit(); @catcon 它们是示例 if 语句。在我的实际代码(更长)中,它有不同的 if 语句(正确地进行错误处理)。我不想发布长代码,因为这不是我要问的问题 【参考方案1】:

您可以制作一个带有模板的html页面,然后使用str_replace函数替换html页面中的关键字。在这种情况下,我们用您的错误消息替换的词是 message

error_page_template.html

<!DOCTYPE html>
<html>
    <head>
        <title>Error Page</title>
    </head>
    <body>

        message

    </body>
</html>

script.php

<?php

    function error_page($message) 
        $htmlTemplate = file_get_contents('error_page_template.html');
        $errorPage = str_replace('message', $message, $htmlTemplate);
        return $errorPage;
    

    echo error_page('An error has occurred');
?>

【讨论】:

谢谢!我没有想到这一点,但这正是我想要的。【参考方案2】:

我在这里链接到另一个脚本失败的文件,该文件获取您定义的消息并将其打印为可以随意设置样式的干净 HTML5。

我认为这是你最好的选择(脚本使用了一个你必须在错误时包含的文件):

<?php
//On failure (this is the error)
$message = 'Error message';
//I can use a variable inside double quotes because they do not take the string
//literally, if it were single quotes it would take the string as a literal and it
//would print $message as $message
//The `die()` function kills the script and executes whatever you put inside of it.

die(require "e_include.php");
?>

然后是另一个文件(正在链接到):

<!DOCTYPE html>
<html>
<head>
    <title>YAY</title>
    <meta charset="utf-8">
</head>
<body>
    <p><?php echo $message ?></p>
</body>
</html>

【讨论】:

以上是关于如何使用自定义 html 消息在出错时退出 php的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 html 属性标签时出错

流明封装。如何加载自定义validation.php 消息文件?

在 Azure PowerShell 中显示自定义错误消息并退出

使用Wix在MSI中自定义操作出错时显示最终用户消息

在 PHP/HTML 中退出并显示错误消息

Anylogic - 使用自定义 GIS 路线绘制动画帧时出错