PHP 7.4.30中http_response_code失效,如何返回带响应体的错误码?
PHP Webhook 拒绝请求并返回JSON响应的正确实现
核心问题分析
你之前的代码只设置了HTTP状态码,但没有输出任何响应体,所以页面显示空白;另外如果PHP脚本有前置输出(比如<?php标签前的空格、BOM头,或者提前echo内容),会导致header设置失效,状态码无法正确返回。
正确实现步骤
- 确保无前置输出:检查PHP文件开头,
<?php标签前不能有任何空格、换行或BOM字符,否则header会发送失败。 - 设置HTTP状态码:使用
http_response_code()(PHP 5.4+支持,兼容所有SAPI环境,比直接写header更可靠)。 - 声明响应类型:设置
Content-Type: application/json,让客户端识别返回的是JSON格式。 - 构造合法JSON响应体:注意JSON语法要求:键必须用双引号,字符串用双引号,分隔符用逗号,避免语法错误。
- 输出响应并终止脚本:用
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
相关产品推荐
相关产品推荐

