在屏幕上打印响应 header 的消息

Print the message of a response header on screen

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

我的目标是设置一个错误处理程序(此处:errorHandler)以在出现错误时向用户显示 user-friendly 消息。所以,不仅是当有"normal"的HTTP请求时,即使对服务器的请求是ajax的请求。

在 ajax 请求的情况下,通过这样做,我已经可以触发相应的 ajax "error" 回调并打印 原因短语的header在里面,如果出现错误。但是在 "normal" 请求的情况下,如下所示,这是行不通的。例如。屏幕上没有打印消息。

你能告诉我,为什么不可以,我该如何解决这个问题?

谢谢。


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();

屏幕上没有打印消息的原因是浏览器只显示 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 包装错误消息。