在屏幕上打印响应 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 包装错误消息。
我正在尝试从我的 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 包装错误消息。