手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

使用PHP得到所有的HTTP请求头

首页 > PHP >

PHP中一般采用getallheaders来获取头部,但事实上,有些模式下是获取不到的(以前真没有注意过在fastcgi下这个函数不能用,当然我现在也没有测试。是老王说的)

他说:

在PHP里,想要得到所有的HTTP请求头,可以使用getallheaders方法,不过此方法并不是在任何环境下都存在,比如说,你使用fastcgi方式运行PHP的话,就没有这个方法,所以说我们还需要考虑别的方法,幸运的是$_SERVER里有我们想要的东西,它里面键名以HTTP_开头的就是HTTP请求头:

$headers = array();
foreach (
$_SERVER as $key => $value) {
    if (
'HTTP_' == substr($key, 0, 5)) {
       
$headers[str_replace('_', '-', substr($key, 5))] = $value;
    }
}


代码很简单,需要说明的是RFC里明确指出了信息头的名字是不区分大小写的。

不过并不是所有的HTTP请求头都是以HTTP_开头的的键的形式存在与$_SERVER里,比如说Authorization,Content-Length,Content-Type就不是这样,所以说为了取得所有的HTTP请求头,还需要加上下面这段代码:

if (isset($_SERVER['PHP_AUTH_DIGEST'])) {
    
$header['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST']);
} elseif (isset(
$_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    
$header['AUTHORIZATION'] = base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $_SERVER['PHP_AUTH_PW']));
}
if (isset(
$_SERVER['CONTENT_LENGTH'])) {
    
$header['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];
}
if (isset(
$_SERVER['CONTENT_TYPE'])) {
    
$header['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];
}


搞定!

网址为:http://hi.baidu.com/thinkinginlamp/blog/item/c0bff01f3beb66f2e1fe0b7e.html




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: php, header, getallheaders

« 上一篇 | 下一篇 »

只显示10条记录相关文章

快速生成目录树 (浏览: 48288, 评论: 7)
8年了。。。我的能力还停留在写留言本的技术能力上。。。。 (浏览: 45049, 评论: 3)
PHP的XSS攻击过滤函数 (浏览: 44227, 评论: 2)
PHP中Eval的作用 (浏览: 43051, 评论: 4)
PHP常见错误(二) (浏览: 41317, 评论: 1)
PHP sendmail (浏览: 39241, 评论: 7)
Imagick DLL (浏览: 34569, 评论: 6)
为debian增加apt-add-repository功能 (浏览: 32451, 评论: 3)
PHP 技巧:file_get_contents的超时处理 (浏览: 31182, 评论: 0)
何为RBAC (浏览: 31128, 评论: 4)

3条记录访客评论


发表评论

评论内容 (必填):