2010-03-18 29 views
17

Continua a leggere prima di dire che si tratta di un duplicato, non lo è. (Per quanto ho potuto vedere)Ottieni la posizione del paese di un IP con PHP nativo

voglio ottenere il codice di contea in php dal client.

Sì, lo so che puoi farlo utilizzando siti esterni o con "geoip_record_by_name", ma non voglio dipendere da un sito esterno e non riesco a installare "pear" per php as im utilizzando shard Dreamhost hosting.

ho pensato che avrei potuto solo fare qualcosa di simile:

$output = shell_exec('whois '.$ip.' -H | grep country | awk \'{print $2}\''); 
echo "<pre>$output</pre>"; 

Ma DreamHost sembra avere una vecchia versione di whois (4.7.5), in modo da ottenere questo errore di assegnare indirizzi IP:

Unknown AS number or IP network. Please upgrade this program. 

Quindi, a meno che qualcuno sa come ottenere un binario di una nuova versione di whois su DreamHost im bloccato.

O c'è un altro modo ho potuto ottenere il codice del paese da parte del cliente che sta caricando la pagina?

risposta

27

Whois è solo un client per il servizio whois, quindi tecnicamente non si è ancora affidamento su un sito esterno. Per le query che non riescono, si potrebbe provare ricadere a un altro sito per la query, come ad esempio hostip.info, che capita di avere un API decente e sembra accogliente:

http://api.hostip.info/country.php?ip=4.2.2.2 

rendimenti

US 

buona fortuna,

--jed

EDIT: @Mint ecco il link per l'API su hostip.info: http://www.hostip.info/use.html

+0

Che restituisce "UK" per me, indipendentemente dall'indirizzo IP che ho inserito alla fine. (Sono nel Regno Unito) –

+1

... l'URL che hai fornito è leggermente errato, corretto è: http://api.hostip.info/country.php?ip=4.2.2.2 –

+0

@Mailslut Sì, tu sono corrette, mi dispiace per quello, non so come mi sia mancato. L'ho corretto nel post. Saluti, --jed –

2

puoi semplicemente installare una copia di whois nella vostra directory home e passare il percorso completo in shell_exec? In questo modo non sei vincolato al loro programma di aggiornamento.

+1

Ho cercato su Google un po 'per trovare un modo per compilare whois ma non ha trovato nulla. Né ho trovato una versione precompilata anche se probabilmente è perché ho cercato su google parole chiave sbagliate, qualche suggerimento su dove posso trovare il sorgente o il binario? – Mint

18

MaxMind forniscono un libero PHP GeoIP country lookup class (c'è anche un paese libero + città lookup uno).

Il bit che si desidera è ciò che è menzionato sotto "Modulo PHP puro". Questo non richiede l'installazione di alcunché, o dipende da essi, né richiede l'installazione di alcun modulo PHP speciale. Basta salvare il file di dati GeoIP da qualche parte, quindi utilizzare la classe fornita per interagire con esso.

2

Un'alternativa, un po 'estrema soluzione al vostro problema sarebbe quello di:

  1. scaricare la versione in formato CSV di country database
  2. Striscia MaxMind le informazioni non è necessario dal CSV con uno script e. ..
  3. ... genera un file PHP standard che contiene una struttura dati contenente l'indirizzo IP come chiave e il codice paese come valore.
  4. Includi il file risultante nei tuoi normali file di progetto e ora disponi di una tabella di ricerca del codice paese completamente interna IP =>.

Lo svantaggio è che, regolarmente, si avrebbe bisogno di rigenerare il file PHP dalla versione più recente del database. Inoltre, è un modo piuttosto brutto di farlo in generale e le prestazioni potrebbero non essere le migliori :)

0

Ecco un sito con uno script che ho appena usato. L'unico problema è che probabilmente dovresti ogni tanto rigenerare gli IP da solo ... il che potrebbe essere doloroso e perché ognuno ti sta dicendo di usare l'API esterna. Ma per me non era la soluzione, perché stavo tirando come 50 IP contemporaneamente, il che significa che probabilmente sarei stato bannato. Quindi la soluzione era usare il mio script o fare dei salvataggi su DB, ma stavo di nuovo tirando le immagini da siti esterni. Comunque qui è il sito che ho trovato script su:

http://coding-talk.com/f29/country-flag-script-8882/

1

consideri ipcountryphp(il mio sito, il mio codice, il mio onore) in quanto fornisce un locale di internet-vita di database liberamente aggiornato. È veloce e completamente autonomo, collegabile a qualsiasi PHP 5.3, SQLite3 e oltre. Ricerca molto veloce e nessuna penalizzazione delle prestazioni.

Basta con sfacciata auto-promozione, cerchiamo di fare sul serio:

Basandosi su interrogazione servizi a distanza in tempo reale per ottenere Paese visitatore può diventare un serio ostacolo per la funzionalità del tuo sito a seconda sulla velocità di risposta del server interrogato. Come regola generale, non è necessario interrogare i servizi esterni per la funzionalità del sito in tempo reale (come il caricamento della pagina). L'utilizzo di API in background è ottimo, ma quando hai bisogno di interrogare il paese di ogni visitatore prima che la pagina venga renderizzata, ti apri a un mondo di dolore. E tieni tu non sei l'unico abusando servizi gratuiti :)

Così query ai servizi di terze parti rimangono in background mentre solo la funzionalità locale che si basa su nessun 3rd-party andare nel presente strati con cui gli utenti interagiscono. Solo il mio paranoico dalle performance un po 'prende questo :)

PS: Lo script sopra menzionato che ho scritto ha anche il supporto IPv6.

+0

Che cosa è successo al sito? –

Problemi correlati