|
PHP如何解析header头部信息
我们可以从$_SERVER这个全局变量中获取到。接下来我们来进行这个操作:
我们写一个简单的php文件测试一下:
- <?php
- // header.php
- var_dump($_SERVER);
- ?>
复制代码
在这里我的访问地址是: http://localhost/header.php
我们使用postman工具或者curl命令请求下这个地址,并加入我们自定义的一个头 token: 123456
- curl -H "token: 123456" http://localhost/header.php
复制代码
在输出中我们可以找到一项
- // ... 省略了好多
- ["HTTP_TOKEN"]=>
- string(6) "123456"
- // ... 省略了好多
复制代码
而这个HTTP_TOKEN就是我们想要的东西,我们传入的小写token, 在这里也转换成了大写。
我们再试一个,这次我们传递两个header:
- curl -H "test_token: 654321" -H "token: 123456" http://localhost/header.php
复制代码
测试发现,我们在输出中只找到了HTTP_TOKEN,缺没有找到我们预想的HTTP_TEST_TOKEN。不要着急,我们把下划线_换成连字符-试试:
- curl -H "test-token: 654321" -H "token: 123456" http://localhost/header.php
复制代码
看看输出,这下两个header都找到了。
- // ... 省略了好多
- ["HTTP_TEST_TOKEN"]=>
- string(6) "654321"
- ["HTTP_TOKEN"]=>
- string(6) "123456"
- // ... 省略了好多
复制代码
综上所述:传递header的键值,只能是单个词或者以中划线-连接的词。不然php会忽略。
好了接下来我们在实际应用中,只要把$_SERVER中的以HTTP_开头的下标都提取出来然后转换成首字母大写的格式就好了。
- <?php
- function parse_headers(){
- $headers = [];
- foreach ($_SERVER as $name => $value)
- {
- if (substr($name, 0, 5) == 'HTTP_')
- {
- $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
- }
- }
- return $headers;
- }
- $headers = parse_headers();
- var_dump($headers);
- ?>
复制代码
看看输出:
- array(5) {
- ["Host"]=>
- string(9) "localhost"
- ["User-Agent"]=>
- string(11) "curl/7.65.3"
- ["Accept"]=>
- string(3) "*/*"
- ["X-Token"]=>
- string(6) "654321"
- ["Token"]=>
- string(6) "123456"
- }
复制代码
|
|