Heim  >  Artikel  >  php教程  >  php $_SERVER信息分析整理

php $_SERVER信息分析整理

WBOY
WBOYOriginal
2016-06-06 19:38:271654Durchsuche

可能还有些不全面,完整的代码在最下面 无 ?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
<?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
php $_SERVER信息分析整理
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php 简单的路由器代码Nächster Artikel:php 自动加载方法