PHP - 获取头http客户端请求信息(getallheaders)
接口交互中由于Ios和Android的操作系统和语言不同 所以有时候需要根据头信息的不同 来对不同客户端进行处理 在获取服务器头信息时 发生了诡异的故事如你所想 在PHP手册中有这样几个函数去抓取http头信息比如get_headers ,getallheaders 但它没有展示出我想要的User-Agent信息 <?phpprint_r(get_headers('http://www.ba
·
接口交互中由于Ios和Android的操作系统和语言不同 所以有时候需要根据头信息的不同 来对不同客户端进行处理 在获取服务器头信息时 发生了诡异的故事
如你所想 在PHP手册中有这样几个函数去抓取http头信息 比如get_headers ,getallheaders 但它没有展示出我想要的User-Agent信息
<?php
print_r(get_headers('http://www.baidu.com'));
//打印结构如下
Array
(
[0] => HTTP/1.1 200 OK
[1] => Server: Tengine
[2] => Date: Fri, 10 Mar 2017 10:02:08 GMT
[3] => Content-Type: text/html; charset=utf-8
[4] => Connection: close
[5] => Vary: Accept-Encoding
[6] => X-Powered-By: PHP/5.6.19
)
getallheaders并没有什么卵用 爆出了淡淡的Fatal error….查看手册发现函数是Apache下才支持的函数 而我的服务器环境是nginx
所以使用超全局变量$_SERVER
/**
** @todo 接收头信息
** @params by tangtang
**/
public function em_getallheaders()
{
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
//在使用正则检查下字符串
if($demandInfo['new_status'] == Api_Crm_SystemConfig::DEMAND_STATUS_WAIT_ALLOT ){
$headers = $this->em_getallheaders();
$bool = preg_match("/android/i",$headers['User-Agent']);
if($bool == TRUE){
$result['telephone']=substr($result['telephone'],0,3).str_repeat('*',8);
}else{
$this->code_back('104');
}
}
这样就很轻松的辨别出客户端的用户信息 根据不同的客户端做出不同的处理 ~
Android
Ios展示效果
更多推荐
所有评论(0)