Passed
Push — master ( 7292e4...0829fd )
by ma
03:25 queued 14s
created

Tool::isAliPay()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 5
rs 10
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:  对象到数组转换
15
     * Author: JiaMeng <[email protected]>
16
     * Updater:
17
     * @param $obj
18
     * @return array
19
     */
20
    private function objectToArray($obj){
21
        if(!is_object($obj) && !is_array($obj)) {
22
            return $obj;
23
        }
24
        $arr = array();
25
        foreach($obj as $k => $v){
26
            $arr[$k] = $this->objectToArray($v);
27
        }
28
        return $arr;
29
    }
30
31
    /**
32
     * Description:  获取ip
33
     * Author: JiaMeng <[email protected]>
34
     * Updater:
35
     * @return string
36
     */
37
    public static function getIp(){
38
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
39
            $cip = $_SERVER["HTTP_CLIENT_IP"];
40
        }else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
41
            $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
42
        }else if(!empty($_SERVER["REMOTE_ADDR"])){
43
            $cip = $_SERVER["REMOTE_ADDR"];
44
        }else{
45
            $cip = '';
46
        }
47
        preg_match("/[\d\.]{7,15}/", $cip, $cips);
48
        $cip = isset($cips[0]) ? $cips[0] : 'unknown';
49
        unset($cips);
50
51
        return $cip;
52
    }
53
54
55
    /**
56
     * Description:  是否是移动端
57
     * Author: JiaMeng <[email protected]>
58
     * Updater:
59
     * @return bool
60
     */
61
    public static function isMobile()
62
    {
63
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
64
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
65
            return true;
66
        }
67
        // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
68
        if (isset ($_SERVER['HTTP_VIA'])) {
69
            // 找不到为flase,否则为true
70
            return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
71
        }
72
        // 脑残法,判断手机发送的客户端标志,兼容性有待提高
73
        if (isset ($_SERVER['HTTP_USER_AGENT'])) {
74
            $clientKeyWords = array(
75
                'nokia',
76
                'sony',
77
                'ericsson',
78
                'mot',
79
                'samsung',
80
                'htc',
81
                'sgh',
82
                'lg',
83
                'sharp',
84
                'sie-',
85
                'philips',
86
                'panasonic',
87
                'alcatel',
88
                'lenovo',
89
                'iphone',
90
                'ipod',
91
                'blackberry',
92
                'meizu',
93
                'android',
94
                'netfront',
95
                'symbian',
96
                'ucweb',
97
                'windowsce',
98
                'palm',
99
                'operamini',
100
                'operamobi',
101
                'openwave',
102
                'nexusone',
103
                'cldc',
104
                'midp',
105
                'wap',
106
                'mobile'
107
            );
108
            // 从HTTP_USER_AGENT中查找手机浏览器的关键字
109
            if (preg_match("/(" . implode('|', $clientKeyWords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
110
                return true;
111
            }
112
        }
113
        // 协议法,因为有可能不准确,放到最后判断
114
        if (isset ($_SERVER['HTTP_ACCEPT'])) {
115
            // 如果只支持wml并且不支持html那一定是移动设备
116
            // 如果支持wml和html但是wml在html之前则是移动设备
117
            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')))) {
118
                return true;
119
            }
120
        }
121
        return false;
122
    }
123
124
    /**
125
     * Description:  判断是否微信内置浏览器访问
126
     * Author: JiaMeng <[email protected]>
127
     * Updater:
128
     * @return bool
129
     */
130
    public static function isWeiXin() {
131
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
132
            return true;
133
        }
134
        return false;
135
    }
136
137
    /**
138
     * Description:  判断是否支付宝内置浏览器访问
139
     * Author: JiaMeng <[email protected]>
140
     * Updater:
141
     * @return bool
142
     */
143
    public static function isAliPay() {
144
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'Alipay') !== false) {
145
            return true;
146
        }
147
        return false;
148
    }
149
150
    /**
151
     * Description:  获取菜单树结构
152
     * Author: JiaMeng <[email protected]>
153
     * Updater:
154
     * @param array $list 数据list
155
     * @param string $filed 主键字段
156
     * @param string $parent_filed 父节点字段
157
     * @param int $parent_id 父id值
158
     * @return array
159
     */
160
    public static function getTreeStructure($list,$filed='id',$parent_filed='pid',$parent_id=0){
161
        $result = array();
162
        if(!empty($list)){
163
            foreach($list as $key=>$val){
164
                if($val[$parent_filed] == $parent_id){
165
                    $val['child'] = self::getTreeStructure($list,$filed,$parent_filed,$val[$filed]);
166
                    if(empty($val['child'])){
167
                        unset($val['child']);
168
                    }
169
                    $result[] = $val;
170
                }
171
            }
172
        }
173
        return $result;
174
    }
175
176
    /**
177
     * 空数组转为object
178
     * 给安卓出接口时部分要求[]返回{}(数组返回字典类型)
179
     * @Author: TinyMeng <[email protected]>
180
     * @param $data
181
     */
182
    static public function nullArrayToObject(&$data){
183
        foreach ($data as $key=>&$val){
184
            if(is_array($val)){
185
                if(empty($val)){
186
                    settype($val,'object');
187
                }else{
188
                    self::nullArrayToObject($val);
189
                }
190
            }
191
        }
192
    }
193
194
}
195