在屏幕上打印响应标题的消息

时间:2018-07-18 17:58:54

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

我试图将自定义响应标头从我的Web服务器发送到浏览器,并在屏幕上打印其原因短语。不幸的是,这不会发生。

我的目标是设置一个错误处理程序(此处为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();

1 个答案:

答案 0 :(得分:1)

之所以没有在屏幕上显示任何消息,是因为浏览器仅显示HTTP消息的正文。 您当前的errorHandler()会产生一个空的正文,因此屏幕上没有任何内容。

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

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

请注意,为简单起见,删除了error_log()行。 当然,如果要使错误消息变得用户友好,则应使用适当的HTML包装错误消息。