+ -
当前位置:首页 → 问答吧 → 遇到一个奇怪的问题,我的代码难道有问题,高手帮我看下

遇到一个奇怪的问题,我的代码难道有问题,高手帮我看下

时间:2010-09-26

来源:互联网

我这个页面的功能是这样的,其实是个页面跳转功能,就是第一次访问者,数据库插入此IP,再次访问的话,数据库查询IP和访问者IP对比,不一致的话就拒绝做页面跳转功能。相同的话就做跳转功能。
现在很郁闷的问题是我如果是固定IP的用户的话访问很顺利,获取IP插入IP,下次也就可以访问了,但是是ADSL用户的话连第一次都不能访问,后来发现插入到数据库的IP和访客本身的IP不一样,第一次插入的时候IP也和访客本身的IP不一样,不知道是什么原因,代码好像也没问题,谁帮我看下啊,我搞了一下午还是没解决。急死了。
代码贴出来
复制代码
  1. <?php
  2. include_once('Inc/Config.inc');
  3. include_once('Inc/Function.php');
  4. $userid=real_ip();
  5. //判断参数是否为空
  6. if(!isset($_GET['id'])||empty($_GET['id']))
  7. {
  8. echo '<img src="Inc/images/check_error.gif" width="16" height="16" />  参数为空<br><br>'; exit;
  9. }
  10. else
  11. {
  12. //获取ID参数
  13. $showid=trim($_GET['id'], '/');
  14. echo $userid."<br/>";
  15. //执行参数查询,获取记录集
  16. $zjh = $db->SelectSQL("SELECT `uid`,`url`,`uip` FROM create_url where uid='".$showid."' order by uid desc LIMIT 1");
  17. //记录集里是否有记录
  18. if(count($zjh)==0){echo '<img src="Inc/images/check_error.gif" width="16" height="16" />  无记录<br><br>'; exit;}
  19. //判断记录集里面允许IP是否为空
  20. if(empty($zjh[0]['uip'])||$zjh[0]['uip']==NULL)
  21. {
  22. //如果为空时插入当前用户的IP,也就是第一次访问的访客
  23. //echo "插入到数据库的IP地址".$userid."<br/>";
  24. $SQL = "UPDATE `create_url` SET `uip` ='".$userid."' WHERE `uid` = '".$showid."'";
  25. $db->ExecuteSQL($SQL,1);
  26. echo "插入语句:".$SQL."<br/>";
  27. //插入成功后跳转到数据库里面指定的网址
  28. NewUrl(0,'',$zjh[0]['url']);
  29. }
  30. else
  31. {
  32. //判断数据库记录集中IP值不为空时,再次判断和当前用户IP是否一致
  33. if($userid==$zjh[0]['uip'])
  34. {
  35. //一致的话就执行跳转
  36. echo $userid;
  37. NewUrl(0,'',$zjh[0]['url']);
  38. }
  39. else
  40. {
  41. //不一直就拒绝跳转
  42. echo "获取的IP地址".$userid."<br/>";
  43. echo "数据库中的IP地址".$zjh[0]['uip'];
  44. echo '<img src="Inc/images/check_error.gif" width="16" height="16" />  IP没权限<br><br>';
  45. }
  46. }
  47. //销毁变量
  48. unset($zjh,$showid,$SQL,$db);
  49. exit;
  50. }
  51. ?>


复制代码
  1. //获取IP的函数
  2. function real_ip()
  3. {
  4.     static $realip = NULL;
  5.     if ($realip !== NULL)
  6.     {
  7.         return $realip;
  8.     }
  9.     if (isset($_SERVER))
  10.     {
  11.         if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  12.         {
  13.             $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  14.             /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
  15.             foreach ($arr AS $ip)
  16.             {
  17.                 $ip = trim($ip);
  18.                 if ($ip != 'unknown')
  19.                 {
  20.                     $realip = $ip;
  21.                     break;
  22.                 }
  23.             }
  24.         }
  25.         elseif (isset($_SERVER['HTTP_CLIENT_IP']))
  26.         {
  27.             $realip = $_SERVER['HTTP_CLIENT_IP'];
  28.         }
  29.         else
  30.         {
  31.             if (isset($_SERVER['REMOTE_ADDR']))
  32.             {
  33.                 $realip = $_SERVER['REMOTE_ADDR'];
  34.             }
  35.             else
  36.             {
  37.                 $realip = '0.0.0.0';
  38.             }
  39.         }
  40.     }
  41.     else
  42.     {
  43.         if (getenv('HTTP_X_FORWARDED_FOR'))
  44.         {
  45.             $realip = getenv('HTTP_X_FORWARDED_FOR');
  46.         }
  47.         elseif (getenv('HTTP_CLIENT_IP'))
  48.         {
  49.             $realip = getenv('HTTP_CLIENT_IP');
  50.         }
  51.         else
  52.         {
  53.             $realip = getenv('REMOTE_ADDR');
  54.         }
  55.     }
  56.     preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
  57.     $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
  58.     return $realip;
  59. }

作者: ecolour   发布时间: 2010-09-26

这个应该是php获取ip函数的问题吧!!你去查查这个函数的作用范围

作者: zfm1988   发布时间: 2010-09-26

相关阅读 更多