为PHP增加纯真IP数据库(qqwry)支持

 当我们的网站需要根据IP来查询IP来源时,我们需要一个IP数据库,而国内最好的IP数据库当属“纯真IP数据库”了。为了读取“纯真IP数据库”中的数据,一般情况下我们需要写一段PHP程序,而目前Discuz!中就有这样的PHP代码,我们可以直接拿来使用。这样的做法对于一般网站来说已经够用了,但是对于计数器网站,有大量的IP查询事务,这时候使用纯PHP代码的方式就显得效率低下了。有没有更高效的方法呢?答案当然是肯定的。国内就有人写出了这样的PHP扩展,并且此扩展已经登录在PECL网站了。此扩展的名字叫做QQWRY,网站地址:http://http://pecl.php.net/package/qqwry/

qqwry的安装

 qqwry的安装方法与一般PHP扩展的安装方法一样:

wget http://pecl.php.net/get/qqwry-0.1.0.tgz
tar zxvf qqwry-0.1.0.tgz
cd qqwry-0.1.0
./configure --with-php-config=/usr/local/web/php/bin/php-config
make
make install

然后在php.ini中加入qqwry支持

extension = "qqwry.so"

 然后,重启php即可实现PHP的纯真IP数据库支持了。相比纯PHP代码的实现,此扩展的效率是其的6至10倍。

 qqwry的使用

 使用方法很简单,首先就是实例化,传入纯真数据库的文件路径,然后调用q方法。该方法返回一个数组,第一个值为所属区域,第二个值为更详细的地址。下面的iconv是把数据从GB2312转到UTF-8,如果你的站点是用GB2312,那么这一步是不需要的。

$qqwry=new qqwry('QQWry.Dat');

list($addr1,$addr2)=$qqwry->q('127.0.0.1');
$addr1=iconv('GB2312','UTF-8',$addr1);
$addr2=iconv('GB2312','UTF-8',$addr2);
echo $addr1,'|',$addr2,"\n";

$arr=$qqwry->q('222.216.47.4');
$arr[0]=iconv('GB2312','UTF-8',$arr[0]);
$arr[1]=iconv('GB2312','UTF-8',$arr[1]);
echo $arr[0],'|',$arr[1],"\n";

$arr=$qqwry->q('64.233.187.99');
$arr[0]=iconv('GB2312','UTF-8',$arr[0]);
$arr[1]=iconv('GB2312','UTF-8',$arr[1]);
echo $arr[0],'|',$arr[1],"\n";

输出如下:

本机地址|
广西南宁市|(青秀区)电信ADSL
美国|加利福尼亚州Google公司