Home > php教程 > php手册 > body text

php $_SERVER信息分析整理

WBOY
Release: 2016-06-06 19:38:27
Original
1620 people have browsed it

可能还有些不全面,完整的代码在最下面 无 ?php/** * Created by PhpStorm. * User: Inhere * Date: 2015/2/27 * Use : (请求来源)客户端信息 * File: Client.php */// namespace environment;/** * 客户端信息 Client */class Client extends AbstractEnv{ /*

可能还有些不全面, 完整的代码在最下面
<?php
/**
 * Created by PhpStorm.
 * User: Inhere
 * Date: 2015/2/27
 * Use : (请求来源)客户端信息
 * File: Client.php
 */

// namespace environment;


/**
 * 客户端信息 Client
 */
class Client extends AbstractEnv
{
    /**
     * @inherit
     * @var array
     */
    static public $config = [

        // $_SERVER['REMOTE_ADDR']
        'addr'      => 'REMOTE_ADDR',

        // $_SERVER['REMOTE_PORT']
        'port'      => 'REMOTE_PORT',

        /**
         * 客户端(与服务端)连接
         * $_SERVER['HTTP_CONNECTION'] = close
         * @var string
         */
        'conn'      => 'HTTP_CONNECTION',

        /**
         * 可接受资源类型
         * $_SERVER['HTTP_ACCEPT']
         * @var string
         */
         // e.g. text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
        'accept'    => 'HTTP_ACCEPT',

        /**
         * 客户端可接受的资源(压缩)编码
         * $_SERVER['HTTP_ACCEPT_ENCODING'];
         * e.g. gzip, deflate, sdch
         * @var string
         */
        'acceptEncoding'  => 'HTTP_ACCEPT_ENCODING',

        /**
         * 客户端默认接受的语言
         * $_SERVER['HTTP_ACCEPT_LANGUAGE'];
         * e.g. zh-CN,zh;q=0.8
         * @var string
         */
        'acceptLang'      => 'HTTP_ACCEPT_LANGUAGE',

        /**
         * 用户代理 (通常是浏览器)
         * $_SERVER['HTTP_USER_AGENT']
         * e.g. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
         * @var string
         */
        'userAgent' => 'HTTP_USER_AGENT',
    ];

    protected $data = [

        'isPc'     => false,
        'isMobile' => false,

        'isUnix'    => false,
        'isLinux'   => false,
        'isWin'     => false,
        'isMac'     => false,
        'isAndroid' => false,
    ];

    // 是移动端
    // protected $isMobile = false;
    // protected $platform;

    public function init()
    {
        parent::init();

        // Parse the HTTP_ACCEPT.
        if ($this->accept) {
            $this->data['accepts'] = $this->_handlerInfo($this->accept);
        }

        // Parse the accepted encodings.
        if ($this->acceptEncoding) {
            $this->data['encodings'] = $this->_handlerInfo($this->acceptEncoding);
        }

        if ($this->acceptLang) {
            $this->data['langs']     = $this->_handlerInfo($this->acceptLang);
        }

        $this->data['isSslConnect'] = $this->isSSLConnection();
        $this->data['ip']           = $this->getIp();

        $this->_userAgentCheck();
    }

    protected function _handlerInfo($info)
    {
        return array_map(function($val)
        {
            return trim(strpos($val,';') ? strchr($val,';', true) : $val);
        },
        (array) explode(',', $info)
        );
    }

    /**
     * Determine if we are using a secure (SSL) connection.
     * @return  boolean  True if using SSL, false if not.
     */
    public function isSSLConnection()
    {
        return (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off');
    }

    /**
     * user-Agent 信息分析
     * @return bool
     */
    protected function _userAgentCheck()
    {
        if (empty($_SERVER['HTTP_USER_AGENT'])) {
            $this->data['os'] = $this->data['browser'] = 'Unknown';

            return true;
        }

        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);

        /* @link http://detectmobilebrowser.com/mobile */
        if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$agent)
            || preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($agent,0,4) ) ) {
            $this->data['isMobile'] = true;
        } else {
            $this->data['isPc']     = true;
        }

        //// system check
        $isUnix = $isLinux = $isMac = $isAndroid = false;

        if (preg_match('/win/i', $agent)) {

            $this->data['isWin'] = true;

            if (preg_match('/nt 6.0/i', $agent)) {
                $os = 'Windows Vista';
            } else if (preg_match('/nt 6.2/i', $agent)) {
                $os = 'Windows 8';
            } else if (preg_match('/nt 6.3/i', $agent)) {
                $os = 'Windows 10';
            } else if (preg_match('/nt 6.1/i', $agent)) {
                $os = 'Windows 7';
            } else if (preg_match('/nt 5.1/i', $agent)) {
                $os = 'Windows XP';
            } else if (preg_match('/nt 5/i', $agent)) {
                $os = 'Windows 2000';
            } else {
                $os = 'Windows other';
            }

        } else if (strpos('linux', $agent)) {

            if (strpos('android', $agent)) {
                $os                      = 'Android';
                $this->data['isAndroid'] = true;
            } else {
                $os                    = 'Linux';
                $this->data['isLinux'] = true;
            }

        } else if (strpos('android', $agent)) {
            $os                      = 'Android';
            $this->data['isAndroid'] = true;
        } else if ( strpos($agent,"iphone") ) {
            $os                  = 'Ios';
            $this->data['isIos'] = true;
        } else if (strpos('ubuntu', $agent)) {
            $os                    = 'Ubuntu';
            $this->data['isLinux'] = true;
        } else if (strpos('mac', $agent)) {
            $os                  = 'Mac OS X';
            $this->data['isMac'] = true;
        } else if (strpos('unix', $agent)) {
            $os                   = 'Unix';
            $this->data['isUnix'] = true;
        } else if (strpos('bsd', $agent)) {
            $os = 'BSD';
        } else if (strpos('symbian', $agent)) {
            $os = 'SymbianOS';
        } else {
            $os = 'Unknown';
        }

        $this->data['os'] = $os;

        //// browser check
        $browser = 'Unknown';

        // myie
        if(strpos($agent, 'myie')){
            $browser = 'Myie';

        // Netscape
        } else if(strpos($agent, 'netscape')) {
            $browser = 'Netscape';

        // Opera
        } else if(strpos($agent, 'opera')){
            $browser = 'Opera';

        // netcaptor
        } else if(strpos($agent, 'netcaptor')) {
            $browser = 'NetCaptor';

        // TencentTraveler
        } else if(strpos($agent, 'tencenttraveler')) {
            $browser = 'TencentTraveler';

        // Firefox
        } else if(strpos($agent, 'firefox')) {
            $browser = 'Firefox';

        // ie
        } else if(strpos($agent, 'msie')) {
            $browser = 'IE';

        // chrome
        } else if(strpos($agent, 'chrome')) {
            $browser = 'Chrome';
        }

        $this->data['browser'] = $browser;

        return true;
    }

    /**
     * get client Ip
     * @from web
     * @return void
     */
    public function getIP()
    {
        if (getenv('HTTP_CLIENT_IP')) {
            $ip = getenv('HTTP_CLIENT_IP');
        } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        } elseif (getenv('HTTP_X_FORWARDED')) {
            $ip = getenv('HTTP_X_FORWARDED');
        } elseif (getenv('HTTP_FORWARDED_FOR')) {
            $ip = getenv('HTTP_FORWARDED_FOR');
        } elseif (getenv('HTTP_FORWARDED')) {
            $ip = getenv('HTTP_FORWARDED');
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }

        return $ip;
    }

}// end class Client
Copy after login
<?php
/**
 * Created by PhpStorm.
 * User: Inhere
 * Date: 2015/2/27
 * Use : ...
 * File: Server.php
 */

// namespace environment;

/**
 * 服务端信息 Server
 */
class Server extends AbstractEnv
{
    /**
     * @inherit
     * @var array
     */
    static public $config = [

        // $_SERVER['REQUEST_SCHEME'] 架构
        // 'scheme' => 'REQUEST_SCHEME',

        // $_SERVER['PATH']
        'path'     => 'PATH',

        // $_SERVER['SERVER_PROTOCOL'] 协议 e.g. HTTP/1.1
        'protocol' => 'SERVER_PROTOCOL',

        // $_SERVER['SERVER_SIGNATURE'] 签名
        'signature' => 'SERVER_SIGNATURE',

        // $_SERVER['SERVER_ADDR']
        'addr'     => 'SERVER_ADDR',

        // $_SERVER['SERVER_PORT']
        'port'     => 'SERVER_PORT',

        // $_SERVER['SERVER_NAME']
        'name'     => 'SERVER_NAME',

        // $_SERVER['SERVER_SOFTWARE']
        'software' => 'SERVER_SOFTWARE',

        // $_SERVER['DOCUMENT_ROOT']
        'docRoot'     => 'DOCUMENT_ROOT',

        // $_SERVER['SCRIPT_FILENAME']
        'scriptFile' => 'SCRIPT_FILENAME',

        // $_SERVER['SCRIPT_NAME']
        'script'     => 'SCRIPT_NAME',

        // $_SERVER['PHP_SELF']
        'self'     => 'PHP_SELF',
    ];

    public function init()
    {
        parent::init();

        // $this->data['uri']       = rtrim($this->data['uri'],'?& ');
        // $this->data['rootUrl']     = $this->scheme . ':/'.'/' . $this->name;
        // $this->data['referer']  = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $this->rootUrl;
        // $this->data['entryUrl']    = $this->rootUrl . $this->script;
        // $this->data['currentUrl']  = $this->isUrl($this->uri) ? $this->uri : $this->rootUrl . $this->uri;

        $this->data['workDir'] = getcwd();
        $this->data['entry'] = $this->getEntry();
        $this->data['root']  = $this->getRoot();


        $this->data['isCli'] = $this->isCli();
        $this->data['isWeb'] = $this->isWeb();

        // operate system
        $this->data['uname'] = PHP_OS;
        $this->data['os']    = strtoupper(substr($this->data['uname'], 0, 3));
        $this->data['isWin'] = ($this->data['os'] == 'WIN');
        $this->data['isLinux'] = ($this->data['os'] == 'LIN');
        $this->data['isUnix'] = $this->isUnix();
    }

    /**
     * getEntry
     * @param   bool $full
     * @return  string
     */
    public function getEntry($full = true)
    {
        $key = $full ? 'scriptFile' : 'script';

        $wdir = $this->data['workDir'];
        $file = $this->data[$key];

        if (strpos($file, $wdir) === 0) {
            $file = substr($file, strlen($wdir));
        }

        $file = trim($file, '.' . DIRECTORY_SEPARATOR);

        if ($full && $this->isCli()) {
            $file = $wdir . DIRECTORY_SEPARATOR . $file;
        }

        return $file;
    }

    /**
     * @param  boolean $full
     * @return string
     */
    public function getRoot($full = true)
    {
        return dirname($this->getEntry($full));
    }

    /**
     * isWeb
     * @return  boolean
     */
    public function isWeb()
    {
        return in_array(
            PHP_SAPI,
            array(
                'apache',
                'cgi',
                'fast-cgi',
                'cgi-fcgi',
                'srv'
            )
        );
    }

    /**
     * isCli
     * @return  boolean
     */
    public function isCli()
    {
        return in_array(
            PHP_SAPI,
            array(
                'cli',
                'cli-server'
            )
        );
    }

    /**
     * isUnix
     * @see  https://gist.github.com/asika32764/90e49a82c124858c9e1a
     * @return  bool
     */
    public function isUnix()
    {
        $unames = array('CYG', 'DAR', 'FRE', 'HP-', 'IRI', 'LIN', 'NET', 'OPE', 'SUN', 'UNI');

        return in_array($this->data['os'], $unames);
    }

    /**
     * check url string
     * @param  string  $str
     * @return boolean
     */
    public function isUrl($str)
    {
        $rule = '/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i';

        return preg_match($rule,$str)===1;
    }
}// end class Server
Copy after login
php $_SERVER信息分析整理
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!