客戶問我,為什麼我的主機上,不能使用這個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['REMOTE_ADDR']." "; try { echo $geoip->lookupCountryName($_SERVER['REMOTE_ADDR']); } catch (Exception $e) { // Handle exception echo "exception"; } ?>