zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    poj2240
    poj1135
    poj1062
    poj3278
    2218 补丁vs错误
    必做: 1041、1024、1077、2218、1183(较难)
    poj2828
    poj3253
    洛谷P1122 最大子树和
    1074 食物链
  • 原文地址:https://www.cnblogs.com/time-is-life/p/3675626.html
Copyright © 2011-2022 走看看