【问题标题】:Print the message of a response header on screen在屏幕上打印响应头的消息
【发布时间】:2018-07-18 17:58:53
【问题描述】:

我正在尝试从我的网络服务器向浏览器发送一个自定义响应标头,并在屏幕上打印其原因短语。不幸的是,这并没有发生。

我的目标是设置一个错误处理程序(此处为:errorHandler),以便在引发错误的所有情况下向用户显示用户友好的消息。所以,不仅是“正常”的 HTTP 请求,即使对服务器的请求是 ajax 请求。

在 ajax 请求的情况下,通过这样做,如果发生错误,我已经可以触发相应的 ajax“错误”回调并在其中打印标头的 原因短语 .但在“正常”请求的情况下,如下所示,这是行不通的。例如。屏幕上没有打印任何消息。

您能告诉我,为什么不,以及如何解决这个问题?

谢谢。


handlers.php:

ini_set('log_errors', 1);
error_reporting(E_ALL);
ini_set('display_errors', 0);

set_error_handler('errorHandler');

function errorHandler($errno, $errstr, $errfile, $errline) {
    header('HTTP/1.1 420 An error occurred during your request. Please try again, or contact us.');
    error_log('Error ' . $errno . ' - ' . $errstr . ' in file ' . $errfile . ' on line ' . $errline);
    exit();
}

index.php:

<?php

require 'handlers.php';

// Because the function test() doesn't exist, an error is thrown.
// But I see no message on screen.
$tmnlid = test();

【问题讨论】:

    标签: php ajax error-handling http-headers httpresponse


    【解决方案1】:

    您没有在屏幕上打印消息的原因是浏览器只显示 HTTP 消息的正文。 你当前的errorHandler() 会产生一个空的身体,因此屏幕上什么都没有。

    如果您希望浏览器显示错误消息,您必须通过echo-ing 将错误消息放入正文中。 因此,您的 errorHandler() 应该如下所示:

    function errorHandler($errno, $errstr, $errfile, $errline) {
        header('HTTP/1.1 420 Custom error message');
        echo 'Custom error message';
        exit();
    }
    

    请注意,为简单起见,删除了 error_log() 行。 当然,如果你想让错误信息对用户友好,你应该用适当的 HTML 包装错误信息。

    【讨论】:

    • 这是一个漂亮的答案。而且效果很好。谢谢你,丽!
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2021-09-21
    • 2013-10-23
    • 2018-10-14
    • 1970-01-01
    • 2012-01-27
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多