2011-06-27 31 views
3

我所見過的所有教程都指向了像geoip_record_by_name這樣的功能。我總是得到這個錯誤:Fatal error: Call to undefined function geoip_record_by_name() in /home/<acct>/public_html/geoip.php on line <line>如何在PHP中進行geoip查找?

我在「共享」主機,這意味着我無法安裝PECL geoip擴展。

什麼是其他(免費!)方式來執行geoip查找?優選不依賴於外部服務的那些?

+0

有一些服務可以讓你下載一個csv格式的粗粒度數據庫,使IPS降到國家級別。但除此之外,你被困在外部服務中。如果提供者的API不太可怕,你可以用一些CURL調用重新創建geoip _ *()函數。 –

+0

這些服務如何確定您的IP地址在哪裏?他們如何獲得地點開始?我怎麼能生成我自己的數據庫? – Cyclone

+0

爲什麼要有自己的數據庫,當有免費的API會給你他們的?要從頭開始創建自己的數據庫需要一年的時間。 –

回答

5

如果您有MySQL服務器,則可以使用免費安裝的IP數據庫,然後執行$_SERVER['REMOTE_ADDR']並針對數據庫數據運行該數據庫。

即(基於一些任意分貝)

<?php 

    $result = mysql_query("SELECT * 
          FROM ips 
          WHERE ip = {$_SERVER['REMOTE_ADDR']} 
          LIMIT 1") or die(mysql_error()); 

    $row = mysql_fetch_assoc($result); 

    $city = $row['city']; 
    $state = $row['state']; 
    $country = $row['country']; 

?> 

有些數據庫(或只是google吧):http://www.ipinfodb.com/ip_database.php

編輯

你也可以做其他的JSON/XML請求API和解析數據:

ie(使用ipinfodb.com再次)

$doc->loadXML(file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=your_key&ip=" . $_SERVER['REMOTE_ADDR'] . "&timezone=false")); 

$country = $doc->getElementsByTagName('CountryName')->item(0)->nodeValue; 
+0

有沒有什麼辦法可以生成你自己的數據庫? – Cyclone

+0

留下您對原始問題的評論。當然,你可以製作你自己的數據庫,但是沒有一個真正快捷的方法來做到這一點。 –

0

您可以嘗試hostip.info,Maxmind或ip2location等等。這些易於使用PHP,可用於共享主機。其中一些也有離線選項。

+0

第一個也是最後一個50英里的路程,Maxmind有點接近但沒有太多...... – Cyclone

+0

@Cyclone:你得到你所支付的。 – webbiedave

相關問題