222.35.115.218 显示是北京 顺义区 铁通
为什么我这里可以?
你有没有搭建好环境,文件有没有放对位置?
============
把QQWry.dat放在这个文件的data目录中
<?php
$ipdatafile = 'data/QQWry.dat'
$ip = '121.33.8.90'//广州的IP
//$ip = '219.234.251.60'//北京的IP
//$ip = '211.160.165.66'//上海的IP
//生产环境用这个代码
//$ip=$_SERVER['REMOTE_ADDR']
$ret = convertip_full($ip,$ipdatafile)
echo $ret
if(preg_match("|上海|",$ret))
{
echo "上海\n<br>"
echo ""
}
elseif(preg_match("|北京|",$ret))
{
echo "北京\n<br>"
echo ""
}
else
{
echo "其它地方\n<br>"
echo ""
}
function convertip_full($ip, $ipdatafile) {
if(!$fd = fopen($ipdatafile,'rb')) {
return '- Invalid IP data file'
}
$ip = explode('.', $ip)
$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3]
if(!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4)) ) return
@$ipbegin = implode('', unpack('L', $DataBegin))
if($ipbegin <0) $ipbegin += pow(2, 32)
@$ipend = implode('', unpack('L', $DataEnd))
if($ipend <0) $ipend += pow(2, 32)
$ipAllNum = ($ipend - $ipbegin) / 7 + 1
$BeginNum = $ip2num = $ip1num = 0
$ipAddr1 = $ipAddr2 = ''
$EndNum = $ipAllNum
while($ip1num >$ipNum || $ip2num <$ipNum) {
$Middle= intval(($EndNum + $BeginNum) / 2)
fseek($fd, $ipbegin + 7 * $Middle)
$ipData1 = fread($fd, 4)
if(strlen($ipData1) <4) {
fclose($fd)
return '- System Error'
}
$ip1num = implode('', unpack('L', $ipData1))
if($ip1num <0) $ip1num += pow(2, 32)
if($ip1num >$ipNum) {
$EndNum = $Middle
continue
}
$DataSeek = fread($fd, 3)
if(strlen($DataSeek) <3) {
fclose($fd)
return '- System Error'
}
$DataSeek = implode('', unpack('L', $DataSeek.chr(0))
不理解,你为什么要用session保存呢?要跨多个页面传值吗?如果只是简单的来跳转,用你说的方法很好呢?
问:数据库是直接诶建个表让后自增列相对应各个城市ID吗
答:一种方法,你给所有的城市自编号;另有一法,就是用自增的id
由于在linux服务器上装了多个版本的PHP,常常感到疑惑的是,在Web中,php的版本是5.6的,而命令行中却可能是7.2的,这就很让人疑惑了,经过了不断摸索,终于发现的缘由。
首先,web中的php版本,是由你的nginx(apache)服务器配置决定的,在nginx(apache)配置文件中都指定了php的版本。
其次,命令行中的php版本,可以通过以下命令切换:
修改版本为php5.6: sudo update-alternatives --set php /usr/bin/php5.6
修改版本为php7.2: sudo update-alternatives --set php /usr/bin/php7.2
停用php5.6: sudo a2dismod php5.6
启用php7.2: sudo a2enmod php7.2
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)