web-dev-qa-db-ja.com

ネイティブPHP)を使用してIPの国の場所を取得します

これが重複していると言う前に読んでください、そうではありません。 (私が見る限り)

クライアントからphpで郡コードを取得したい。

はい、外部サイトまたは「geoip_record_by_name」などを使用してこれを実行できることは知っていますが、外部サイトに依存したくないので、シャードDreamhostホスティングを使用してphpの「pear」をインストールできません。

私はこのようなことをすることができると思いました:

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

しかし、dreamhostには古いバージョンのwhois(4.7.5)があるようです。そのため、IPの割り当てで次のエラーが発生します。

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

したがって、誰かが新しいバージョンのwhoisのバイナリをdreamhostimに取得する方法を知らない限りスタックします。

または、ページを読み込んでいるクライアントから国コードを取得する別の方法はありますか?

17
Mint

Whoisはwhoisサービスの単なるクライアントであるため、技術的には依然として外部サイトに依存しています。失敗したクエリについては、hostip.infoなどのクエリの別のサイトにフォールバックしてみてください。これらのサイトはたまたま適切なAPIを備えており、友好的であるように見えます。

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

戻り値

US

幸運を、

--jed

編集:@Mintここにhostip.infoのAPIへのリンクがあります: http://www.hostip.info/use.html

27
Jed Daniels

MaxMindは無料の PHP GeoIP国ルックアップクラス を提供します(無料の国+都市ルックアップクラスもあります)。

必要なビットは、「純粋なPHPモジュール」で説明されているものです。これには、何かをインストールしたり、それらに依存したりする必要はありません。また、特別なPHPモジュールをインストールする必要もありません。 GeoIPデータファイルをどこかに保存し、提供されたクラスを使用して操作するだけです。

18
Dal Hundal

あなたの問題に対する別の、やや極端な解決策は次のようになります:

  1. MaxMindのCSV形式バージョンをダウンロードする 国のデータベース
  2. スクリプトを使用してCSVから不要な情報を取り除き、...
  3. ...標準のPHPファイルを生成します。このファイルには、IPアドレスをキーとして、国コードを値として含むデータ構造が含まれています。
  4. 結果のファイルを通常のプロジェクトファイルに含めると、完全に内部IP =>国コードルックアップテーブルが作成されます。

欠点は、定期的に、データベースの最新バージョンからPHPファイルを再生成する必要があることです。また、これは一般的にかなり厄介な方法であり、パフォーマンスが低下する可能性があります。最高:)

2
Shane Breatnach

Whoisのコピーをホームディレクトリにインストールして、フルパスをShell_execに渡すことはできますか?そうすれば、アップグレードスケジュールに縛られることはありません。

2
McJeff

ipcountryphp(私のサイト、私のコード、私の名誉)を検討してください。これは、ローカルのインターネットライフタイムで自由に更新されるデータベースを提供します。高速で完全に自己完結型で、あらゆるものにプラグイン可能PHP 5.3、SQLite3以降。非常に高速なシークでパフォーマンスの低下はありません。

恥知らずな自己宣伝で十分です、真剣になりましょう:

リアルタイムでのリモートサービスのクエリに依存訪問者の国を取得する主要なボトルネックになる可能性があるクエリされたサーバーの応答速度によっては、サイトの機能が低下します。経験則として、リアルタイムのサイト機能(ページの読み込みなど)について外部サービスにクエリを実行しないでください。バックグラウンドでAPIを使用することは素晴らしいことですが、ページがレンダリングされる前に各訪問者の国を照会する必要がある場合、あなたは苦痛の世界に自分自身を開きます。 そして、無料サービスを悪用しているのはあなただけではないことを覚えておいてください:)

Soサードパーティのサービスへのクエリはバックグラウンドにとどまりますが、サードパーティに依存しないローカル機能のみが、ユーザーが対話するレイヤーに入ります。私のわずかにパフォーマンスの妄想がこれを引き受けます:)

[〜#〜] ps [〜#〜]上記のスクリプトはIPv6もサポートしています。

1
CodeAngry
0

これが私が今使ったスクリプトのあるサイトです。唯一の問題は、おそらく時々自分でIPを再生成する必要があるということです...これは、誰もが外部APIを使用するように言っている理由の痛みと苦痛かもしれません。しかし、私にとっては、一度に50のIPのようにプルしていたので、それは解決策ではありませんでした。つまり、おそらく禁止されるでしょう。したがって、解決策は、独自のスクリプトを使用するか、DBに保存することでしたが、外部サイトから画像をプルしていました。とにかくここに私がスクリプトを見つけたサイトがあります:

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

0

こちらもその1つです。 IPを変数に変更するだけです。
http://api.codehelper.io/ips/?callback=codehelper_ip_callback&ip=143.3.87.19

0
T.Todua