先把代码贴上
<?php
class IP{                       //获取客户IP地址
function getIpAdr(&$ip){
  $ip1=getenv("HTTP_X_FORWARDED_FOR");
  $ip2=getenv("HTTP_CLIENT_IP");
  $ip3=getenv("REMOTE_ADDR");
  
if($ip1&&$ip1!='unknow')
   $ip=$ip1;
else if($ip2&&$ip2!='unknow')
   $ip=$ip2;
else if($ip3&&$ip3!='unknow')
   $ip=$ip3;
else 
   $ip='127.0.0.1';
}
}
function get_netip($myip){   //只留客户IP地址的前三位
  $temp=explode(".",$myip);
  $netip.=$temp[0];
  $netip.=".";
  $netip.=$temp[1];
  $netip.="."; 
  $netip.=$temp[2];
  return $netip;
}
$filename="ip.ini";     //定义操作文件 
$ip_lib=file($filename);  //读取文件数据到数组中 
$allow=0;
$IP=new IP;
$thisip="";
$IP->getIpAdr(&$thisip);
$thenetip=get_netip($thisip);for($i=0;$i<count($ip_lib);$i++){  
  if(ereg($thenetip,$ip_lib[$i])){
    $allow=1;
    break;
  }
}  if ($allow==1) 
{
  echo '';
}
else {
  //echo "<script>location.href='error.php';</script>";
    echo "您的IP地址未经授权,不允许订餐!";
  
//die();
exit();
}
?>                  ip.ini  中是加了127.0.0   
Warning: Call-time pass-by-reference has been deprecated in D:\PHPnow-1.5.6\htdocs\ip\ip.php on line 32Notice: Undefined variable: netip in D:\PHPnow-1.5.6\htdocs\ip\ip.php on line 20
这是第一个问题,我直接调试的时候出现的,使用的php套件是PHPnow-1.5.6如果我把这个代码放到dz论坛的插件目录下 就不行了 。总是获取不了IP地址。总是提示  echo "您的IP地址未经授权,不允许订餐!";
目录是。。D:\PHPnow-1.5.6\htdocs\dz\source\plugin\study_dz_dingcan我是在study_dz_dingcan.inc.php   include(ip.php) 这个文件的,我的ip.ini也放在ip文件夹下,请问我上面的代码$filename="ip.ini";     //定义操作文件   对吗?
还是要写成 $filename="ip/ip.ini";     //定义操作文件     但是2种都试了,都不能达到效果,请高手帮忙解决啊,分不够继续追加。

解决方案 »

  1.   

    ereg已经废弃了,
    用strpos不是更好?比较每一个ip。ini里面的ip是否被包含在用户的ip当中不就行了,何必要去explode,还要ereg?
    假设ip.ini
    127.0.0
    192.168.0用户的ip是
    192.111.11.111你检查
    127.0.0和192.168.0是否在192.111.11.111中含有不就行了,不需要那么复;或者
    $user_ip='192.111.11.111';
    $user_ip_p3 =substr($user_ip,0, strrpos($user_ip,'.'));//取前三位$config_text = "\n".file_get_contents('ip.ini');
    if(strpos($config_text,"\n".$user_ip_p3 )!==false)
    {
    die('blocked');
    }