PHP - 获取头http客户端请求信息(getallheaders)

接口交互中由于Ios和Android的操作系统和语言不同 所以有时候需要根据头信息的不同 来对不同客户端进行处理 在获取服务器头信息时 发生了诡异的故事

如你所想 在PHP手册中有这样几个函数去抓取http头信息 比如get_headers ,getallheaders 但它没有展示出我想要的User-Agent信息


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
)

PHP - 获取头http客户端请求信息(getallheaders)_第1张图片

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');
            }
        }

这样就很轻松的辨别出客户端的用户信息 根据不同的客户端做出不同的处理 ~

PHP - 获取头http客户端请求信息(getallheaders)_第2张图片

Android

PHP - 获取头http客户端请求信息(getallheaders)_第3张图片

Ios展示效果

你可能感兴趣的:(PHP,php,操作系统,android,ios,函数)