你能告诉 PHP 在发生错误时发送标头(如 500)吗?

2024-03-28

在我当前的项目中,我使用普通 HTTP 请求查询 PHP,但也通过 AJAX 查询,有时返回 JSON 格式的数据,有时返回普通文本。当发生错误时,在正常请求中,您会看到错误消息并可以采取一些措施。另一方面,对于 AJAX 请求,您无法确定是否收到错误或您想要的数据,因为它不会直接显示 - 您只会遇到麻烦,因为您的应用程序将不再工作。

所以我想到了一个错误处理系统。我最好的想法是,如果发生错误,则发送 500“内部服务器错误”标头,因此在我的 JS 中,当我发送 AJAX 请求时,我可以简单地以这种方式检查错误并处理它。

不幸的是,PHP 本身并不发送这种类型的标头(例如当您遇到解析错误或代码中出现错误时)。

Can you:

a) 如果发生错误,告诉 PHP 发送 500 之类的标头?或者
b) 使用set_error_handler发送500头然后调用PHP常规错误处理?或者
c) 当 PHP 发生错误时,您能以任何其他方式发送错误标头吗?


我更喜欢使用异常来处理错误。首先,您需要安装 error-to-exception 错误处理程序(http://php.net/manual/en/class.errorexception.php,示例 1),然后将主应用程序代码包装在 try-catch 块中并发送catch 部分中的适当标头。例如:

try {
    $myApplication->run();
} catch(Exception $e) {
   // log or otherwise register the error
   header('HTTP/1.1 500 Internal Server Error');
}

不幸的是,这不适用于所谓的“致命错误”,要处理这些错误,您必须使用这样的愚蠢技巧

ob_start();

register_shutdown_function(function() {
    $p = ob_get_contents();
    if(preg_match('~Fatal error~', $p))
        header('HTTP/1.0 500 Internal Server Error');
});

...your code... 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能告诉 PHP 在发生错误时发送标头(如 500)吗? 的相关文章

随机推荐

  • C 中任意数量的空格分割字符串

    我有一个文件 其中每个用户名和密码都由不同数量的空格分隔 bob passowrd1 saly password2 sam password2 void parse FILE open open fopen file txt char li
  • 在r中,如何按一个因子修剪或缩尾数据

    我试图在因素 主题 的每个级别应用温莎函数 以消除极端情况 我可以将winsor函数应用于整个列 但想在主题内执行此操作 Subject RT 1 402 1 422 1 155 1 460 2 283 2 224 2 346 2 447
  • java.lang.NullPointerException:使用 QueryDsl 过滤数据时

    我正在使用 Spring data jpa 来创建服务 在下面的代码中 我使用 Querydsl 在网格上实现搜索过滤器 但对于建筑物名称 我无法过滤网格 我正进入 状态 java lang NullPointerException nul
  • Visual Studio 2008、C++ 的探查器?

    有什么好的 免费的 或者至少相当便宜的 至少适用于本机 C 的分析器 可以与 Visual Studio 2008 专业版 我在看社区版但是他们 似乎只支持 Visual Studio 2003 和 Visual Studio 2005 如
  • @NotNull 注释在 Spring boot 应用程序中不起作用

    下面是我的 DTO 课程 public class AbstractDTO extends BaseDTO private Integer createdBy JsonFormat shape JsonFormat Shape STRING
  • 如何设置子视图到窗口的视图方向

    我创建了一个 UIView 我想将视图子视图添加到 appdelegate 窗口 UIView newView UIView alloc initWithFrame CGRectMake 0 0 1048 748 AppDelegate a
  • 从列表中删除重复的子列表

    如果我有一个这样的列表 mylist 1 2 3 a c 3 4 5 1 2 3 4 5 a c 3 4 5 1 2 删除重复子列表的最佳方法是什么 现在我用this https stackoverflow com a 20462808 4
  • Docker COPY 没有这样的文件或目录

    构建 docker 映像在复制任务中失败 没有这样的文件或目录 我正在使用你好世界春天的例子 https spring io guides gs spring boot docker 从 openjdk 构建 8 jdk alpine Ru
  • Jquery 加载函数将附加到已经存在的 HTML 上

    我正在尝试进行 AJAX 调用 该调用将附加 html 即向标签之间已存在的内容添加额外的 html 这是我的加载函数的样子 我如何修改这个函数才能将其附加到类 tid list 中 提前致谢 您必须通过ajax获取数据并使用 tid li
  • 在 jQuery 中将 processData 设置为 false 会破坏我的 AJAX 请求

    我已经用谷歌搜索了一段时间 只能找到什么processData false做 我找不到经历过同样问题的人 我将 JSON 传递回服务器 并且不希望 jQuery 自动将数据转换为查询字符串 因此我将 processData 设置为 fals
  • 获取 VBScript 中变量的类型

    如何使用 VBScript 获取变量的类型 Is VarType https msdn microsoft com en us library aa263402 v vs 60 aspx你需要什么 返回一个指示变量子类型的值 Constan
  • 在区域之外的 MVC 应用程序中托管 WCF 服务

    我有一个 MVC 项目 我在根目录中添加了一个名为 WCF 的文件夹 在此文件夹中 我创建了一个名为的 WCF 服务CustomFunctions 当我尝试启动该服务时 我收到以下错误 错误 无法从中获取元数据http localhost
  • 使用 ajax 包含子行的闪亮数据表

    我正在尝试使用数据表库来实现更多自定义的闪亮效果 这是我试图做的例子 https datatables net examples api row details html https datatables net examples api
  • AfxGetAppName() 返回垃圾字符

    我的应用程序中有以下代码行 CString strAppName AfxGetAppName 有时会充满strAppName出现了垃圾字符 我不明白为什么 有人有主意吗 TIA 如果你改变的话这是可能的m pszAppName手动 在应用程
  • 将字符串列表通过管道传输到 for 循环

    我如何将列表传递给for在bash中 I tried echo some different lines for i do echo do something with i done 但这行不通 我也试图找到一个解释man但没有man fo
  • 使用 javascript 在循环内设置超时

    我正在制作一个解谜函数 它使用当前打乱顺序的一系列拼图 每个片段都有一个 id 它指向数组中的正确位置 我在要交换的部分上设置了叠加颜色 我希望在着色和交换的部分之间有一个延迟 function solvePuzzle while rezo
  • JavaScript/GSON:通过对象图动态访问 JSON 引用(循环引用)

    由于存在多个循环引用 我在通过 Google GSON 序列化 Java 对象时遇到了问题 我所有的尝试都以 StackOverflowException 结束 因为 GSON 无法处理这些循环引用 作为解决方案 我发现以下GraphAda
  • SELECT FOR UPDATE 中的数据库死锁

    我的应用程序间歇性陷入僵局 我的应用程序有 1 个表 例如 EMPLOYEE ID PK NAME SAL 并且有 2 个会话 第一节 SELECT ID NAME SAL FROM EMPLOYEE WHERE SAL SELECT MI
  • spring mvc 对 URL 参数进行加密和编码

    我正在编写一个 Spring mvc 应用程序 它需要发送一封包含链接和加密参数的电子邮件 用户将单击该链接 我需要解密新页面中的参数 因此 我正在编写一个 util 类来加密和解密以及对参数进行编码和解码 当我运行我的独立java类 用于
  • 你能告诉 PHP 在发生错误时发送标头(如 500)吗?

    在我当前的项目中 我使用普通 HTTP 请求查询 PHP 但也通过 AJAX 查询 有时返回 JSON 格式的数据 有时返回普通文本 当发生错误时 在正常请求中 您会看到错误消息并可以采取一些措施 另一方面 对于 AJAX 请求 您无法确定