Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(): Failed opening '/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php' for inclusion (include_path='.:/opt/cpanel/ea-php70/root/usr/share/pear') in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24
Geo IP support – unethost無限空間虛擬主機 技術分享部落格

Geo IP support

客戶問我,為什麼我的主機上,不能使用這個php函數 geoip_country_name_by_name?

當然是因為GeoIP的PECL預設沒有安裝導致的。本來是打算用WHM的功能,按幾個鈕就把GeoIP的PECL灌好的,結果讓我大失所望,灌不起來。查了一下,為什麼會灌不起來,根本的原因似乎是:如果要灌這個PECL的php extension,必須要先灌一個MaxMind的GeoIP資料庫,我想一想,太麻煩了,所以我就灌了一個替代方案給客戶。我灌了PEAR套件裡的Net_GeoIP給他。

PECL是C語言寫的extension,所以一有東西不對,就會無法編譯。PEAR基本上是用php寫的,一瞬間就灌好了。本來以為這樣子就結束了…結果,客戶回報我說,東西不能用。

不會吧? 有沒有搞錯?明明就是成功地安裝啊?

我查了一下,PEAR也是一樣有需要外部GeoIP資料庫的問題。只是說,有一個很大的差別是,PEAR的資料庫是由寫php程式的客戶,自己負責綁定。

嗯,就這一回吧,好主機商做到底。我放了一段testing code給客戶,而且也順便幫他把geoip的資料庫從網路上抓好。( 這個客戶看起來也不太會寫程式的樣子。冏 ~ )


<?
require_once "Net/GeoIP.php";

$geoip = Net_GeoIP::getInstance("./GeoIP.dat");

echo $_SERVER&#91;'REMOTE_ADDR'&#93;."
";
try {
echo $geoip->lookupCountryName($_SERVER['REMOTE_ADDR']);
} catch (Exception $e) {
// Handle exception
echo "exception";
}

?>