Discuz 学习笔记一 :getgdc 和get_client_ip

  1. Getgdc函数

    discuz有一个超级变量的自定义函数:

     

    function getgpc($k, $type='GP') {

        $type = strtoupper($type);

        switch($type) {

            case 'G': $var = &$_GET; break;

            case 'P': $var = &$_POST; break;

            case 'C': $var = &$_COOKIE; break;

            default:

                if(isset($_GET[$k])) {

                    $var = &$_GET;

                } else {

                    $var = &$_POST;

                }

                break;

        }

     

        return isset($var[$k]) ? $var[$k] : NULL; //注意这里没有设置的时候返回的是NULL.

    }

     

    这里我讲一下,比如你要获取$_GET['odaboy']的值,那么你只要这么调用getgpc('odaboy','G'),同时你也可以这样getgpc('odaboy')这种默认接受GET和POST,

    这个函数在function_core.php文件里面

     

  2. 获取ip地址

        private function _get_client_ip() {

            $ip = $_SERVER['REMOTE_ADDR'];

            if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {

                $ip = $_SERVER['HTTP_CLIENT_IP'];

            } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {

                foreach ($matches[0] AS $xip) {

                    if (!preg_match('#^(10|172.16|192.168).#', $xip)) {

                        $ip = $xip;

                        break;

                    }

                }

            }

            return $ip;

        }

     

    不过这样有风险,给了客户端伪造ip的机会。具体看这篇文章:

    http://www.cnblogs.com/kingthy/archive/2007/11/24/970783.html

原文地址:https://www.cnblogs.com/time-is-life/p/3675626.html