博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用PHP得到所有的HTTP请求头
阅读量:3603 次
发布时间:2019-05-20

本文共 945 字,大约阅读时间需要 3 分钟。

作者:老王
在PHP里,想要得到所有的HTTP请求头,可以使用方法,不过此方法并不是在任何环境下都存在,比如说,你使用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://usizn.baihongyu.com/

你可能感兴趣的文章
Nginx 的这些妙用,你都 get 到了吗?
查看>>
面试再被问到 Java 多线程安全问题,就这么回答他!
查看>>
深入探究 RocketMQ 事务机制的实现流程,为什么它能做到发送消息零丢失?
查看>>
索引很难么?带你从头到尾捋一遍 MySQL 索引结构!
查看>>
一种基于 MyBatis 框架的分库分表方案!
查看>>
设计一个百万级的消息推送系统!
查看>>
打开黑盒:从 MySQL 架构设计出发,看它是如何执行一条 SQL 语句的?
查看>>
一网打尽:Java 程序员必须了解的计算机底层知识!
查看>>
大白话带你认识 Kafka 背后优秀的架构设计!
查看>>
都是套路:盘点 Java 面试中链表的几大解题模板方法!
查看>>
面试官:你能聊聊高并发下的接口幂等性如何实现吗?
查看>>
面试热身:5 亿整数的大文件,排个序 ?
查看>>
面试官:浏览器请求 www.baidu.com 时,背后都干了些啥?
查看>>
面试官:RocketMQ 如何基于mmap+page cache实现磁盘文件的高性能读写?
查看>>
掌握它才说明你真正懂 Elasticsearch
查看>>
JVM 垃圾回收-实战篇
查看>>
生产案例:消息中间件 MQ 如何处理消费失败的消息?
查看>>
面试官:聊聊微信和淘宝扫码登录背后的实现原理?
查看>>
【不懂就问】CPU 到底是怎么识别代码的?
查看>>
11张图:帮你搞定 Spring Bean 生命周期
查看>>