You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.4.30中http_response_code失效,如何返回带响应体的错误码?

PHP Webhook 拒绝请求并返回JSON响应的正确实现

核心问题分析

你之前的代码只设置了HTTP状态码,但没有输出任何响应体,所以页面显示空白;另外如果PHP脚本有前置输出(比如<?php标签前的空格、BOM头,或者提前echo内容),会导致header设置失效,状态码无法正确返回。

正确实现步骤

  1. 确保无前置输出:检查PHP文件开头,<?php标签前不能有任何空格、换行或BOM字符,否则header会发送失败。
  2. 设置HTTP状态码:使用http_response_code()(PHP 5.4+支持,兼容所有SAPI环境,比直接写header更可靠)。
  3. 声明响应类型:设置Content-Type: application/json,让客户端识别返回的是JSON格式。
  4. 构造合法JSON响应体:注意JSON语法要求:键必须用双引号,字符串用双引号,分隔符用逗号,避免语法错误。
  5. 输出响应并终止脚本:用echo输出JSON,再用exit()或die()终止脚本。

完整示例代码

返回403状态码及验证失败JSON的示例

<?php
// 模拟JSON验证失败的逻辑
$validationFailed = true;

if ($validationFailed) {
    // 设置HTTP状态码
    http_response_code(403);
    
    // 声明响应为JSON格式
    header('Content-Type: application/json');
    
    // 构造合法的JSON响应体(修正示例中的语法错误)
    $response = [
        'senderUniqueReference' => 'S-005-03458900823-SUPP-20222313-12345687A',
        'transactionId' => 'T-006-1234567890-SUPP-20220401-1234CC',
        'sentTimestamp' => '2021-12-25T06:06:12.45',
        'message' => 'XYZ123 - That\'s not our equipment'
    ];
    
    // 输出响应并终止脚本
    echo json_encode($response);
    exit();
}

// 验证通过后的业务逻辑(省略)
?>

返回400状态码的示例

<?php
// 模拟JSON格式错误或字段缺失的验证失败场景
http_response_code(400);
header('Content-Type: application/json');
$response = [
    'code' => 'INVALID_JSON',
    'message' => '请求JSON格式错误,缺少必填字段'
];
echo json_encode($response);
exit();
?>

排查技巧

  • 如果状态码仍不生效,查看PHP错误日志,若存在headers already sent错误,说明脚本有前置输出。
  • 可通过var_dump(headers_sent())检查是否有header已提前发送,快速定位问题。

内容的提问来源于stack exchange,提问作者Tym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:40:35