php 8 中 authorization 请求头无法获取的解决方案:php 8 默认不再支持 `apache_request_headers()` 在非 apache sapi 环境下(如 php cli、fpm 或 xampp 内置服务器)正确读取 `authorization` 头,导致 jwt 验证失败;需改用 `getallheaders()` 兼容实现或直接从 `$_server` 变量提取。
在 PHP 8(尤其是 XAMPP 默认使用 Apache + mod_php 时看似兼容,但实际在部分配置或更新后行为已变化)中,apache_request_headers() 函数存在显著限制:它仅在 Apache 模块模式(mod_php)下可靠工作,且对 Authorization 这类敏感头默认被 Apache 屏蔽,除非显式启用 RewriteRule 或 CGIPassAuth 配置。而 PHP 7 中部分旧版 Apache 配置可能默认放行,造成“PHP 7 正常、PHP 8 报错”的假象。
// 替代 apache_request_headers()
if (!function_exists('getallheaders')) {
function getallheaders() {
$headers = [];
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) === 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
// 特别处理 Authorization(因部分 SAPI 不映射为 HTTP_AUTHORIZATION)
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$headers['Authorization'] = $_SERVER['HTTP_AUTHORIZATION'];
} elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
$headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
}
return $headers;
}
}
$authHeader = getallheaders();
$jwt = null;
if (isset($authHeader['Authorization']) && preg_match('/Bearer\s+(.*)$/i', $authHeader['Authorization'], $matches)) {
$jwt = $matches[1];
} else {
http_response_code(401);
echo json_encode(['message' => 'Access token not found.']);
exit;
}$jwt = null;
// 尝试多种常见 SERVER 键名(Apache/FPM/Nginx 差异)
$authKeys = ['HTTP_AUTHORIZATION', 'REDIRECT_HTTP_AUTHORIZATION', 'Authorization'];
foreach ($authKeys as $key) {
if (isset($_SERVER[$key]) && preg_match('/Bearer\s+(.*)$/i', $_SERVER[$key], $matches)) {
$jwt = $matches[1];
break;
}
}
if (!$jwt) {
http_response_code(401);
echo json_encode(['message' => 'Authorization header missing or malformed.']);
exit;
}RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .*
- [e=HTTP_AUTHORIZATION:%1]否则 Authorization 头会被 Apache 直接丢弃。
require "../vendor_big/autoload.php";
use Firebase\JWT\JWT;
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
require $_SERVER['DOCUMENT_ROOT'].'/db.php';
$data = json_decode(file_get_contents("php://input"), true);
// ✅ 安全提取 JWT
$jwt = null;
foreach (['HTTP_AUTHORIZATION', 'REDIRECT_HTTP_AUTHORIZATION', 'Authorization'] as $key) {
if (isset($_SERVER[$key]) && preg_match('/Bearer\s+(.*)$/i', $_SERVER[$key], $matches)) {
$jwt = $matches[1];
break;
}
}
if (!$jwt) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized: No valid Bearer token provided.']);
exit;
}
$secret_key = "bmR0di1zYWxlcy1hcHAtYWR0ZWNoLXJpc2hp";
try {
$decoded = JWT::decode($jwt, $secret_key, ['HS256']);
// ✅ JWT 验证成功,继续业务逻辑
echo json_encode(['status' => 'success', 'user_id' => $decoded->user_id]);
} catch (Exception $e) {
http_response_code(401);
echo json_encode(['message' => 'Invalid or expired token.', 'error' => $e->getMessage()]);
}通过以上方式,即可彻底解决 PHP 8 下 Authorization not found 的核心问题,确保 JWT 认证在现代 PHP 环境中稳定运行。
# php
# word
# js
# json
# apache
# nginx
# app
# access
# red
# Token
相关文章:
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站VPS能否同时实现高效与安全翻墙?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何高效生成建站之星成品网站源码?
如何用已有域名快速搭建网站?
建站主机与虚拟主机有何区别?如何选择最优方案?
如何用PHP快速搭建CMS系统?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站VPS推荐:2025年高性能服务器配置指南
,怎么在广州志愿者网站注册?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站之星上传入口如何快速找到?
建站上传速度慢?如何优化加速网站加载效率?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
建站主机如何选?高性价比方案全解析
公众号网站制作网页,微信公众号怎么制作?
兔展官网 在线制作,怎样制作微信请帖?
网站按钮制作软件,如何实现网页中按钮的自动点击?
家具网站制作软件,家具厂怎么跑业务?
建站之星安装步骤有哪些常见问题?
代购小票制作网站有哪些,购物小票的简要说明?
C#怎么创建控制台应用 C# Console App项目创建方法
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
制作门户网站的参考文献在哪,小说网站怎么建立?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何通过宝塔面板实现本地网站访问?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
西安大型网站制作公司,西安招聘网站最好的是哪个?
建站之星logo尺寸如何设置最合适?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之星如何快速解决建站难题?
建站之星安装模板失败:服务器环境不兼容?
建站之星如何取消后台验证码生成?
建站主机无法访问?如何排查域名与服务器问题
如何通过VPS搭建网站快速盈利?
如何在企业微信快速生成手机电脑官网?
制作网站外包平台,自动化接单网站有哪些?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何在景安服务器上快速搭建个人网站?
如何通过山东自助建站平台快速注册域名?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何做静态网页,sublimetext3.0制作静态网页?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
*请认真填写需求信息,我们会在24小时内与您取得联系。