php获取本机主板网卡IP地址.跳转读取相应的数据

大神哪位知道,php获取本机主板网卡IP地址.跳转读取相应的数据?

比如我这里有4个电脑,每个电脑有俩网卡,一个内网一个外网。主板网卡为内网。
内网IP从33.33.33.11到33.33.33.14(已经设置好几台机器IP地址,然后用33.33.33.33当服务器)
首先PHP是否获取主板的网卡地址,就是我说的内网.

当IP是33.33.33.11的时候,页面自动转入【ip11】,读取数据库web中带ip11的数据
当IP是33.33.33.12的时候,页面自动转入【ip12】,读取数据库web中带ip12的数据
---------------------------------------
<?php
$connec=mysql_connect('localhost','root','root') or die('mysql_error: '.mysql_error());
mysql_select_db('Shujuku',$connec) or die ('db_error: '.mysql_error());
mysql_query("set names 'gb2312'");

$t01="ip11"; //IP是33.33.33.11
$t02="ip12"; //IP是33.33.33.12
$t03="ip13"; //IP是33.33.33.13
$t04="ip14"; //IP是33.33.33.14
?>
当前是【<?echo"$t04";?>】 这是固定的,请弄一下这里也要自动换ip11~ip14
<?php
//读取数据库种的web的数据,比如啊我是这样读取
//这是固定的,请弄一下这里也要自动换ip11~ip14
$sql='select * from link where web="'.$t04.'" order by id desc limit 50';
$conn=@mysql_query($sql,$connec);
while(@$row=mysql_fetch_array($conn)){
?>
<? echo $row["web"]?>
<?php } ?>
============================不知您看明白我弄的这个了不?
我刚测试了,客户端通过内网ip访问,获取的内网ip
那下一步怎么弄呢。

就一个页面.
就比如电影分类这样说吧,分四个类别。。
IP:33.33.33.11用户访问显示相应【动作片】分类的内容
IP:33.33.33.12用户访问显示相应【爱情片】分类的内容
IP:33.33.33.13用户访问显示相应【科幻片】分类的内容
IP:33.33.33.14用户访问显示相应【综艺片】分类的内容
最新回答
相爱如饮酒

2024-05-15 02:31:08

大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

经过我的研究有两种方法来获取用户的真实外网IP。

方法一:curl

复制代码代码如下:

function get_onlineip() {
$ch = curl_init('
http://www.ip138.com/ip2city.asp
');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
preg_match('/\[(.*)\]/', $a, $ip);
return $ip[1];
}

方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址

复制代码代码如下:

function get_onlineip() {
$onlineip = '';
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}
他说那很美い

2024-05-15 06:42:24

这样就可以了:
list(undef,undef,undef,$ip)=explode('.',getenv('REMOTE_ADDR'));

$ip='ip'.$ip;

$sql='select * from link where web="'.$ip.'" order by id desc limit 50';
追问
能否按照我代码弄全一点呢。
追答
就用我的代码就可以了呀,如果你修改后还是有问题,请粘贴你修改后的代码。
追问
不会弄呢。麻烦弄全一些吧。代码都是放在哪里?
追答
请按照我说的方法修改你的代码:
我给出了三句,你需要用sql那句替换你的,在sql之前插入前面的两句。

如果修改后遇到问题,请描述你的问题情况,并粘贴代码。
追问

那我指定的 t01,t02,t03 怎么调. 现在16行有错误

我是asp转行过来的。对php不懂,希望理解啊。


追答
下次报错希望粘贴报错信息,谢谢配合。

第15行修改为:

list($t,$t,$t,$ip)=explode('.',getenv('REMOTE_ADDR'));

第16行没有错

第10~12三行修改为下面的1行:
echo "当前为 $ip ";

第6~9行可以删除。
追问

Notice: Undefined variable: ip in D:\phpStudy\WWW\ip.php on line 11
当前为

-------------

追答
错误含义是11行变量$ip无值,这行应该交换到14行之后,因为13、14两行完成了赋值。

变量赋值这个和ASP是通的,只是ASP不报错,输出空内容。
追问
当前为 ip12,已经获得IP的尾数了
请问当获取IP为13的时候。怎么把这个13换成 自定义的内容。
我的t01=爱情片,t02=动作片,t03=科幻片,t04=恐怖片
(在上面可能我没写清楚。)
比如拿电影分类说。
33.33.33.13访问后IP是12 然后 sql里面web=“动作片”
33.33.33.14访问后IP是14 然后 sql里面web=“恐怖片”
追答
  list($t,$t,$t,$ip)=explode('.',getenv('REMOTE_ADDR'));
  $dict=array(11=>'动作片',12=>'爱情片',13=>'科幻片',14=>'恐怖片');
  $web=isset($dict[$ip])?$dict[$ip]:'其它片';
  $sql="select * from link where web='$web' order by id desc limit 50";
  echo $sql;

用上面的语句替换你的sql语句,之前给的不要了,因为ip11不利于字典赋值,希望你在$dict(上面的第2行)写上完整的对应关系,“其它片”是没有定义的地址,你可以修改。