Tool::getIp()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 5
eloc 12
c 2
b 0
f 0
nc 8
nop 0
dl 0
loc 15
rs 9.5555
1
<?php
2
namespace tinymeng\tools;
3
4
/**
5
 * Name: Tool.php.
6
 * Author: JiaMeng <[email protected]>
7
 * Date: 2018/8/17 14:20
8
 * Description: Tool.php.
9
 */
10
11
class Tool{
12
13
    /**
14
     * Description:  获取ip
15
     * Author: JiaMeng <[email protected]>
16
     * Updater:
17
     * @return string
18
     */
19
    public static function getIp(){
20
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
21
            $cip = $_SERVER["HTTP_CLIENT_IP"];
22
        }else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
23
            $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
24
        }else if(!empty($_SERVER["REMOTE_ADDR"])){
25
            $cip = $_SERVER["REMOTE_ADDR"];
26
        }else{
27
            $cip = '';
28
        }
29
        preg_match("/[\d\.]{7,15}/", $cip, $cips);
30
        $cip = isset($cips[0]) ? $cips[0] : 'unknown';
31
        unset($cips);
32
33
        return $cip;
34
    }
35
36
    /**
37
     * Description:  获取Origin
38
     * Author: JiaMeng <[email protected]>
39
     * Updater:
40
     * @return string
41
     */
42
    public static function getOrigin(){
43
        $origin = '';
44
        if (isset($_SERVER['HTTP_X_ORIGINAL_FOR'])) {
45
            $origin = $_SERVER['HTTP_X_ORIGINAL_FOR'];
46
        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
47
            $origin = $_SERVER['HTTP_X_FORWARDED_FOR'];
48
        }
49
        return $origin;
50
    }
51
52
53
    /**
54
     * Description:  是否是移动端
55
     * Author: JiaMeng <[email protected]>
56
     * Updater:
57
     * @return bool
58
     */
59
    public static function isMobile()
60
    {
61
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
62
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
63
            return true;
64
        }
65
        // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
66
        if (isset ($_SERVER['HTTP_VIA'])) {
67
            // 找不到为flase,否则为true
68
            return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
69
        }
70
        // 脑残法,判断手机发送的客户端标志,兼容性有待提高
71
        if (isset ($_SERVER['HTTP_USER_AGENT'])) {
72
            $clientKeyWords = array(
73
                'nokia',
74
                'sony',
75
                'ericsson',
76
                'mot',
77
                'samsung',
78
                'htc',
79
                'sgh',
80
                'lg',
81
                'sharp',
82
                'sie-',
83
                'philips',
84
                'panasonic',
85
                'alcatel',
86
                'lenovo',
87
                'iphone',
88
                'ipod',
89
                'blackberry',
90
                'meizu',
91
                'android',
92
                'netfront',
93
                'symbian',
94
                'ucweb',
95
                'windowsce',
96
                'palm',
97
                'operamini',
98
                'operamobi',
99
                'openwave',
100
                'nexusone',
101
                'cldc',
102
                'midp',
103
                'wap',
104
                'mobile'
105
            );
106
            // 从HTTP_USER_AGENT中查找手机浏览器的关键字
107
            if (preg_match("/(" . implode('|', $clientKeyWords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
108
                return true;
109
            }
110
        }
111
        // 协议法,因为有可能不准确,放到最后判断
112
        if (isset ($_SERVER['HTTP_ACCEPT'])) {
113
            // 如果只支持wml并且不支持html那一定是移动设备
114
            // 如果支持wml和html但是wml在html之前则是移动设备
115
            if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
116
                return true;
117
            }
118
        }
119
        return false;
120
    }
121
122
    /**
123
     * Description:  判断是否微信内置浏览器访问
124
     * Author: JiaMeng <[email protected]>
125
     * Updater:
126
     * @return bool
127
     */
128
    public static function isWeiXin() {
129
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
130
            return true;
131
        }
132
        return false;
133
    }
134
135
    /**
136
     * Description:  判断是否支付宝内置浏览器访问
137
     * Author: JiaMeng <[email protected]>
138
     * Updater:
139
     * @return bool
140
     */
141
    public static function isAliPay() {
142
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'Alipay') !== false) {
143
            return true;
144
        }
145
        return false;
146
    }
147
148
}
149