php接口返回http状态码需用http_response_code()或header()函数设置响应头,不能靠html标签;二者均须在任何输出前调用,推荐优先使用http_response_code(),并配合content-type头返回json。

在 PHP 接口中返回 HTTP 状态码,**不是靠“加标签”实现的**,而是通过 http_response_code() 函数或 header() 函数手动设置响应头中的状态行。HTML 标签(如 <?php ?>)只是用来嵌入 PHP 代码,本身不参与状态码控制。
用 http_response_code() 设置状态码
这是最直接、推荐的方式,专用于设置 HTTP 状态码:
- 它会自动更新响应的状态行(如
HTTP/1.1 404 Not Found),且不影响后续输出 - 支持常见状态码,也支持自定义(如
http_response_code(422)) - 必须在任何输出(包括空格、换行、echo、HTML)之前调用,否则会报 “headers already sent” 错误
示例:
php// 返回 400 错误
http_response_code(400);
echo json_encode(['error' => 'Invalid request']);
?>
用 header() 手动发送状态行
更底层的方式,适合需要精确控制协议版本或自定义短语的场景:
- 语法:
header('HTTP/1.1 401 Unauthorized'); - 注意:PHP 默认使用 HTTP/1.1;若运行在 CGI/FastCGI 环境下,可能需用
STATUS:头(如header('Status: 401 Unauthorized');) - 同样要求在任何输出前调用
示例(兼容性更强写法):
if (empty($_GET['token'])) {header('HTTP/1.1 401 Unauthorized');
echo json_encode(['msg' => 'Missing token']);
exit;
}
?>
配合 JSON 接口的常见实践
现代 API 通常返回 JSON,并明确状态码,建议组合使用:
- 先设状态码,再设 Content-Type,最后输出 JSON
- 避免因错误输出(如 BOM、空行)导致 header 失效
- 可封装成简单响应函数提升可维护性
示例函数:
function api_response($data, $code = 200) {http_response_code($code);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
// 使用
api_response(['user' => 'admin'], 200); // OK
api_response(['error' => 'Not found'], 404); // Not Found
?>
调试与注意事项
状态码是否生效,不能只看浏览器页面内容,要查网络响应头:
- 浏览器按 F12 → Network → 点开请求 → 查看 “Status” 列和 “Response Headers” 中的
status或协议行 - 用 curl 测试:
curl -I https://yoursite.com/api/user(-I 只取响应头) - 确保文件无 UTF-8 BOM(尤其 Windows 编辑器保存时易引入),否则会提前输出不可见字符,导致 header 失效
- 框架(如 Laravel、ThinkPHP)通常有更高级的响应构造方式,无需手写
http_response_code()
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











