php7下使用PECL安装Piwik的GeoIP插件
引子
Piwik默认使用来访者语言判断地理位置,官方也同意这种判断方式不准确(但出厂既可用)。官方推荐了几种方式来增加定位的可靠性,常见的有mod_geoip
和使用PECL编译GeoIP插件
。
引用官方对于mod_geoip的描述,
It(mod_geoip) uses a GeoIP database and MaxMind’s PHP API to accurately determine the location of your visitors. If your website gets a lot of traffic, you may find that this location provider is too slow. In this case, you should install the PECL extension or a server module.
mod_geoip因为调用的是PHP API,不如PECL编译出的geoip.so软件库快。所以毫无疑问我们用GeoIP插件。
事出原因
查阅官方FAQ后,发现其针对的是PHP5环境,不是甚至debian9都在用的PHP7。测试后发现原先命令会有错误发生,故实验并作此文。
解决方法
使用的指令和解释如上。
后记
风风火火装完插件,发现GeoIP插件的配置有不少坑。
1. GeoLiteCity数据库下载错了
博主用免费提供的GeoLiteCity数据库,但是错误的下载了名为GeoLiteCityv6.dat
的文件。后发现文件名中包含的v6不是数据库版本,而是指数据库的内容是IPv6的对应地理信息。
同时PECL安装所得的geoip.so
不支持IPv6型GeoIP库。强行使用会导致Piwik相关管理页面500报错。
2. GeoIP数据库的文件名错误
数据库文件名必须为GeoIPCity.dat
,同时其路径在geoip.ini
中由geoip.custom_directory
规定。否则GeoIP插件将无法读取数据库。
3. 不推荐将GeoIP数据库放在Piwik文件夹中
因为Piwik会定期自动检查安装文件的一致性,所以不能将GeoIP数据库随便扔到诸如/var/lib/piwik/
中,会有警报弹出。所以推荐将GeoIP数据库放入/path/to/piwik/misc
。