17

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

クライアントから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の新しいバージョンのバイナリをdreamhostに取得する方法を知らない限り、立ち往生しています。

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

4

8 に答える 8

27

Whois はただの whois サービスのクライアントであるため、技術的にはまだ外部サイトに依存しています。失敗したクエリについては、適切な API を持っていてフレンドリーに見える hostip.info など、クエリの別のサイトにフォールバックしてみることができます。

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

戻り値

US

幸運を、

--ジェド

編集: @Mint hostip.info の API へのリンクは次のとおりです: http://www.hostip.info/use.html

于 2010-03-23T02:15:58.580 に答える
18

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

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

于 2010-03-18T08:08:44.727 に答える
2

whois のコピーをホーム ディレクトリにインストールし、完全なパスを shell_exec に渡すだけでよいでしょうか? そうすれば、彼らのアップグレード スケジュールに縛られることはありません。

于 2010-03-18T08:01:59.783 に答える
1

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

恥知らずな自己宣伝はもう十分です。真剣に取り組みましょう。

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

そのため、サードパーティ サービスへのクエリはバックグラウンドに留まり、サードパーティに依存しないローカル機能のみがユーザーが操作するレイヤーに入ります。これに対する私のわずかにパフォーマンスの偏執的な見方です:)

PS私が書いた上記のスクリプトはIPv6もサポートしています。

于 2013-04-09T05:26:17.603 に答える
0

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

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

于 2012-08-28T12:20:29.837 に答える
0

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

于 2013-12-17T18:03:53.253 に答える
0

ここにいくつかあります:

すべてがわずかに異なる結果を返します。

于 2013-08-20T00:14:06.103 に答える