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

    xiaoxiao2021-03-25  78

    接口交互中由于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展示效果

    转载请注明原文地址: https://ju.6miu.com/read-23419.html

    最新回复(0)