根据IP来判断来源区域显示不同的页面 大家有没有思路

gaofaq 2005-01-26 02:51:43
一个总公司 各地有分公司 我想让每个分公司打开网站的时候都显示他们所在地分公司的首页
网上有IP地址列表,像QQ自带的显示来源地的qqWry.dll,基本已经足够用了,但那些只是些文字信息
怎样才能分拣出来呢,用代码来表示每个地市,重新建立一个数据库来存储的话这个结构该怎么做呢

还有QQ自带的那个qqWry.dll用什么工具打开转换啊。
...全文
808 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
L0ading 2005-03-02
  • 打赏
  • 举报
回复
up
jxyuhua 2005-01-26
  • 打赏
  • 举报
回复
IP库字段信息:
* Beginning IP
* Ending IP
* Beginning IP Number
* Ending IP Number
* Country Code
* Country Name
-------------------------------------------------------------------
"2.6.190.56","2.6.190.63","33996344","33996351","GB","United Kingdom"
"3.0.0.0","4.17.142.255","50331648","68259583","US","United States"
"4.17.143.0","4.17.143.15","68259584","68259599","CA","Canada"
"4.17.143.16","4.18.32.71","68259600","68296775","US","United States"
"4.18.32.72","4.18.32.79","68296776","68296783","MX","Mexico"
"4.18.32.80","4.18.65.255","68296784","68305407","US","United States"
"4.18.66.0","4.18.67.255","68305408","68305919","MX","Mexico"
"4.18.68.0","4.20.69.255","68305920","68437503","US","United States"
"4.20.70.0","4.20.70.255","68437504","68437759","FR","France"
"4.20.71.0","4.21.164.183","68437760","68527287","US","United States"
"4.21.164.184","4.21.164.191","68527288","68527295","CA","Canada"
"4.21.164.192","4.22.196.255","68527296","68601087","US","United States"
"4.22.197.0","4.22.197.255","68601088","68601343","CA","Canada"
-----------------------------------------------------------------
假设你有以上的信息,具体到了某个城市,
然后通过:
function getIpInformation($ip)
{
global $class_db;
if(empty($ip) || ! isset($ip))
{
Return '';
}
$iparray = explode(".", $ip);
$iprange = 16777216 * $iparray[0] + 65536 * $iparray[1] + 256 * $iparray[2] + $iparray[3];
$ip_sql = "SELECT countryname FROM " . TABLE_IPADDRESS . " ip WHERE " . $iprange . " >= ip.begin_num AND " . $iprange . " <= ip.end_num";
$ip_result = $class_db->query($ip_sql);
$ip_row = $ip_result->fetchRow();
$ip_country = $ip_row['countryname'];
Return $ip_country;
}

求个对应的城市名称,
再通过一个表,将此城市与分公司对应起来,跳转OK
tod204 2005-01-26
  • 打赏
  • 举报
回复
同意 ice_berg16(寻梦的稻草人)
magicsnake 2005-01-26
  • 打赏
  • 举报
回复
不对不对,上面的我想错了.

这样吧,建这样一个表
create table ip_seg
(
city_info varchar(50) not null,
ip_begin varchar(12),
ip_end varchar(12)
)

ip_begin,ip_end的格式是ip各个段的合并,每个段不够3位的补0
比如:127.0.0.1 就是 127000000001

将$_SERVER['REMOTE_ADDR']也分解成这样的格式
那么就可以用这个语句查询

select * from ip_seg where $ip >= ip_begin and $ip <= ip_end
surfchen 2005-01-26
  • 打赏
  • 举报
回复
试试iptolong()
magicsnake 2005-01-26
  • 打赏
  • 举报
回复
create table ip_seg
(
city_info varchar(50) not null,
ip_begin1 int,
ip_begin2 int,
ip_begin3 int,
ip_begin4 int,
ip_end1 int,
ip_end2 int,
ip_end3 int,
ip_end4 int
)
写ip的时候分解成4段写入.
这样的表结构看起来虽然有些弱智,但是方便查询语句操作也能满足你的要求了,
你用php写ip地址段查询语句的时候,可以用pos()分解当前ip地址,然后构造下面的语句:

select city_info from ip_seg
where $ip_1 >= ip_begin1 and $ip_1 <= ip_end1 and
$ip_2 >= ip_begin2 and $ip_2 <= ip_end2 and
$ip_3 >= ip_begin3 and $ip_3 <= ip_end3 and
$ip_4 >= ip_begin4 and $ip_4 <= ip_end4

QQ那个我也不知道怎么打开
gaofaq 2005-01-26
  • 打赏
  • 举报
回复
我知道qqWry.dll是最新最全的,但是我不知道怎么打开它;
而且,他里面的数据都是按段来分的(也有点的),这个怎么判断才能效率最高啊,
比如现在有一个61.133.133.133访问,数据库里有对应的一段地址是61.133.0.0-61.133.255.255是某地的,我现在怎么判断才能实现最高效率的检索IP所对应的地市然后转到相应页面呢?
用PHP
magicsnake 2005-01-26
  • 打赏
  • 举报
回复
嗯,我记得网上有人收集过ip地址对应的地区表(细到城市的),你可以google一下
ice_berg16 2005-01-26
  • 打赏
  • 举报
回复
这些IP与城市和分公司首页的对应关系应该保存到文本文件或数据库中
分公司打开网站时,根据$_SERVER['REMOTE_ADDR']得到用户IP,
假设该对应关系是保存在数据库中
ip city branch_page

211.98.2.4 沈阳 shenyang.htm
............
再根据IP从对应关系中找到城市和分公司首页,
select branch_page from tbl where ip = {$_SERVER['REMOTE_ADDR']}
转向
header("Location: $branch_page");
梅雪香 2005-01-26
  • 打赏
  • 举报
回复
很多网站上都上取得客户机IP地址的代码,再进行比较就可以知道是哪个公司的了
如果要登陆就更容易了,用户信息里可以带分公司编号

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧