存档

文章标签 ‘ip’

ubuntu服务器安装php geoip拓展教程

2020年11月13日 评论已被关闭

我们可以安装php的geoip拓展来实现获取国家等ip地理信息,简单的说就是实现这个链接的函数功能:https://www.php.net/manual/en/book.geoip.php,如果没有安装拓展,这个链接上面函数的功能是不能使用的。

参考链接:
https://www.maxmind.com/en/home
https://www.miyuru.lk/geoiplegacy(这里可以下载到geoip的dat文件)
https://pecl.php.net/package/geoip
https://www.php.net/manual/en/geoip.setup.php
https://www.php.net/manual/en/book.geoip.php
https://db-ip.com/
https://db-ip.com/db/download/ip-to-city-lite
https://members.ip-api.com/#pricing
https://serverpilot.io/docs/how-to-install-the-php-geoip-extension/
https://blog.csdn.net/xpy870663266/article/details/94742491
https://valynkin.ru/maxmind-geoip2-na-ubuntu-1604-php56.html
https://blog.csdn.net/weixin_34245082/article/details/92028414

简单总结下ubuntu服务器安装php geoip拓展的过程吧
一开始我是在一台vps下操作,源是阿里云的源,装了php5.6,按照网上的搜索依次执行命令,发现遇到各种问题,上方的链接有的也是其中的解决办法,但是就是不行。后来换了一台服务器是官方源,sudo apt-get update之后,可以看到有php5.6-geoip拓展,输入sudo apt-get install php5.6-(按tab键可提示),这样的话就简单了(我怀疑是源的问题,没调试了)
可以看到apt-get里面的拓展,这样就方便了,不用自己编译安装,执行:
sudo apt-get install php5.6-geoip
执行完毕在/usr/share/GeoIP可以看到.dat文件和ipv6的dat文件
是执行完毕后,重启php5.6-fpm,发现问题了,discuz论坛无法回帖了,不过还好,我的需求是php7.4支持就可以了(我的服务器上是php5.6和php7.4共存的),所以我只需要执行:
sudo apt-get install php7.4-geoip
执行完毕后,重启php7.4-fpm,搞定

ubuntu服务器安装php geoip拓展教程就写到这里,只适合本人自己阅读,网友仅供参考(服务器环境有很大区别)

下面备注自动更新数据库的操作方法:
打开maxmind.com:登录后,个人中心:Services->My License Key
创建key之后,点击Download Config下载GeoIP.conf到/etc/GeoIP.conf
sudo apt-get install geoipupdate
安装好之后,需要更新的时候执行:geoipupdate -v
这样就可以自动更新了(可以定时任务执行)
参考:https://www.awaimai.com/2117.html

可以先执行php:var_dump(geoip_database_info());打印当前版本的信息,然后更新之后,再运行一次php,对比2次版本不同。

可是我们发现,/usr/share/GeoIp下面的.dat文件并没有更新,经过测试,从https://www.miyuru.lk/geoiplegacy下载最新的,然后执行:
sduo cd /usr/share/GeoIp/
sudo mkdir test
cd test
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind4.dat.gz
sudo gunzip maxmind4.dat.gz
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind6.dat.gz
sudo gunzip maxmind6.dat.gz
cd ../
sudo mv GeoIP.dat GeoIP.dat.bk
sudo mv GeoIPv6.dat GeoIPv6.dat.bk
sudo mv test/maxmind4.dat GeoIP.dat
sudo mv test/maxmind6.dat GeoIPv6.dat
sudo service php7.4-fpm restart
最后php执行:var_dump(geoip_database_info());似乎报错,所以就不折腾了,可能拓展安装的只有等拓展更新了才能更新数据库?有待验证

特别备注:获取ipv6的信息,要使用:
var_dump(geoip_country_code_by_name_v6(‘2601:8:be00:cf20:ca60:ff:fe09:35b5’));


分类: php学习, ubuntu高手 标签: , , , ,

android-ip地址转成8位十六进制串

2015年10月22日 没有评论

/** ip转16进制 */
public static String ipToHex(String ips) {
StringBuffer result = new StringBuffer();
if (ips != null) {
StringTokenizer st = new StringTokenizer(ips, “.”);
while (st.hasMoreTokens()) {
String token = Integer.toHexString(Integer.parseInt(st.nextToken()));
if (token.length() == 1)
token = “0” + token;
result.append(token);
}
}
return result.toString();
}

/** 16进制转ip */
public static String texToIp(String ips) {
try {
StringBuffer result = new StringBuffer();
if (ips != null && ips.length() == 8) {
for (int i = 0; i < 8; i += 2) {
if (i != 0)
result.append(‘.’);
result.append(Integer.parseInt(ips.substring(i, i + 2), 16));
}
}
return result.toString();
} catch (NumberFormatException ex) {
Logger.e(ex);
}
return “”;
}

分类: android 标签: ,

【免费】比较不错的php获取ip地址,城市,国家源文件

2014年12月29日 没有评论

发现比较不错的php获取ip地址,城市,国家源文件,如下

http://dev.maxmind.com/zh-hans/geoip/legacy/geolite/

php官方介绍:http://php.net/manual/zh/book.geoip.php

 

需要注意的是maxmind是geoip数据库的提供方,

同时也提供了很多语言的sample和api说明文档。

比如php,和php的geoip库是有很大区别的,包含使用方式,接口函数。

php官方的geoip需要配置php环境,加载geoip.dll库,并在php.ini中指定GEOIP库地址。

maxmind提供一系列 .inc 和 .php 对环境无依赖,只要支持php,直接require后即可使用。

一、GEOIP数据库

http://dev.maxmind.com/geoip/geolite

细分到国家:GeoLite Country
细分到城市:GeoLite City

二、php官方geoip.dll库

下载dll http://windows.php.net/downloads/pecl/releases/geoip/1.0.8/
修改php.ini,启用geoip库:

1
extension=php_geoip.dll

追加geoip段,指定数据库位置:

1
2
[geoip]
geoip.custom_directory = "D:\php5.3\geo\"

测试代码
注意geoip.dll中使用的 GeoIPCity.dat 即 GeoLiteCity.dat,用的时候注意看提示

1
2
3
4
echo geoip_country_name_by_name( "8.8.8.8" ) . "\n";
print_r( geoip_record_by_name( "8.8.8.8" ) );
echo geoip_country_name_by_name( "61.139.2.69" ). "\n";
print_r( geoip_record_by_name(  "61.139.2.69" ) );

三、MaxMind官方php文件函数库

文档和示例:http://dev.maxmind.com/geoip/downloadable

修改maxmind示例中 sample.php 和 sample_city.php 中 GeoIP.dat/GeoLiteCity.dat 路径为你自己的路径
同一目录用 “./GeoIP.dat” 或 “./GeoLiteCity.dat” 即可。
详细到国家

1
2
3
4
5
include("geoip.inc");
$gi = geoip_open( "./GeoIP.dat", GEOIP_STANDARD );
echo geoip_country_code_by_addr($gi, "8.8.8.8") . "\t" . geoip_country_name_by_addr($gi, "8.8.8.8") . "\n";
echo geoip_country_code_by_addr($gi, "61.139.2.69") . "\t" . geoip_country_name_by_addr($gi, "61.139.2.69") . "\n";
geoip_close($gi);

详细到国家城市

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
include("geoipcity.inc");
include("geoipregionvars.php");
$gi = geoip_open("./GeoLiteCity.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr($gi,"8.8.8.8");
print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
print $record->city . "\n";
print $record->postal_code . "\n";
print $record->latitude . "\n";
print $record->longitude . "\n";
print $record->metro_code . "\n";
print $record->area_code . "\n";
print $record->continent_code . "\n";
print "\n-----\n";
$record = geoip_record_by_addr($gi,"61.139.2.69");
print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
print $record->city . "\n";
print $record->postal_code . "\n";
print $record->latitude . "\n";
print $record->longitude . "\n";
print $record->metro_code . "\n";
print $record->area_code . "\n";
print $record->continent_code . "\n";
geoip_close($gi);

看自己开发环境和具体情况决定用哪种。

 

———————————

自己写的简单php代码:

<?php
require(‘geoip.inc’);
$gi=geoip_open(‘geoip_country.dat’,GEOIP_STANDARD);
function getip($isInt=0){
$ip=FALSE;
if(!empty($_SERVER[‘HTTP_CLIENT_IP’])){$ip=$_SERVER[‘HTTP_CLIENT_IP’];}
if(!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
$ips=explode(‘, ‘,$_SERVER[‘HTTP_X_FORWARDED_FOR’]);
if($ip){array_unshift($ips,$ip);$ip=FALSE;}
for($i=0;$i<count($ips);$i++) {if(!eregi(“^(10|172\.16|192\.168)\.”,$ips[$i])){$ip=$ips[$i];break;}}
}
$ip=$ip?$ip:$_SERVER[‘REMOTE_ADDR’];
return $isInt?bindec(decbin(ip2long($ip))):$ip;
}
$country=geoip_country_code_by_addr($gi,getip());
geoip_close($gi);
?>

分类: php学习 标签: , ,

php如何随机生成一个国内的IP呢

2013年9月23日 没有评论

今天由于项目需要,特意做了一个功能,php随机生成一个国内的IP地址,实现代码如下:

$ip_long = array(
array(‘607649792′,’608174079’),//36.56.0.0-36.63.255.255
array(‘1038614528′,’1039007743’),//61.232.0.0-61.237.255.255
array(‘1783627776′,’1784676351’),//106.80.0.0-106.95.255.255
array(‘2035023872′,’2035154943’),//121.76.0.0-121.77.255.255
array(‘2078801920′,’2079064063’),//123.232.0.0-123.235.255.255
array(‘-1950089216′,’-1948778497′),//139.196.0.0-139.215.255.255
array(‘-1425539072′,’-1425014785′),//171.8.0.0-171.15.255.255
array(‘-1236271104′,’-1235419137′),//182.80.0.0-182.92.255.255
array(‘-770113536′,’-768606209′),//210.25.0.0-210.47.255.255
array(‘-569376768′,’-564133889′),//222.16.0.0-222.95.255.255
);
function curl_file_get_contents($remoteUrl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remoteUrl);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

$rand_key=mt_rand(0,9);
$ip=long2ip(mt_rand($ip_long[$rand_key][0],$ip_long[$rand_key][1]));
$sinaIP=json_decode(curl_file_get_contents(‘http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=’.$ip),true);
$ipcity=$sinaIP[‘province’].$sinaIP[‘city’].($sinaIP[‘isp’]?’/’.$sinaIP[‘isp’]:”);

die($ip.”<br />”.$ipcity);

由此可以生成随机的IP,并获得城市名称。

分类: php学习 标签: ,
css.php