0

apaches mod_geoipおよびphpのgeoip.soモジュールを使用して、ユーザーがアクセスしている国/大陸を検出します。

最初はPHPを使用していましたが、数か月前にapache構成内でgeoipデータを使用し始めたため、現在は両方を使用しています。

これは冗長です。

$ _SERVER ['GEOIP_COUNTRY_CODE'] / $ _SERVER ['GEOIP_CONTINENT_CODE']ですでに国/大陸が公開されているため、phpのgeoip.soを無効にすることを検討しています。

これを行う前に、geoipがユーザーの場所を検出できない場合、これら2つが何に等しいかを知る必要があります。

以前は、php側で、次の行に沿って何かを使用していました。

function geoiplookup($ip){
    if($return=@geoip_country_code_by_name($ip))
        return $return;
    return false;
}

したがって、geoip_country_code_by_nameが国コードを取得できなかったためにfalseが返された場合は、スクリプトに保存された国コードを(bool)falseに設定します。

それで、

apache mod_geoipを使用する場合、国コードを取得できない場合、geoipはこれらの2つの変数を何に設定しますか?

ありがとう。

4

1 に答える 1

2

mod_geoip ソースを調べることにしました。

変更ファイルから:

1.3.3 2008 年 8 月 13 日

  • 地域データベースが使用され、国が見つからない場合、GEOIP_COUNTRY_CODE が設定されない問題を修正しました。以前は GEOIP_COUNTRY_CODE が設定されていましたが空でした (Boris Zentner )

したがって、提供された IP から国 / 大陸が見つからない場合、GEOIP_COUNTRYC_CODE は単に設定されないように見えます。

これはコードベースのかなり重要な部分であり、確認する必要があるため、誰かがこれを確認できますか.

Cコードを調べて、未知の国で何が起こっているのかを正確に突き止めるのに苦労しています.


私たちが知る限り、はい、GEOIP_COUNTRY_CODE は国を検出できる場合にのみ設定されます。

mod_geoip ソースから:

if (cfg->GeoIPOutput & GEOIP_NOTES) {
    ap_table_set(r->notes, "GEOIP_CONTINENT_CODE", continent_code);
    ap_table_set(r->notes, "GEOIP_COUNTRY_CODE", country_code);
    ap_table_set(r->notes, "GEOIP_COUNTRY_NAME", country_name);
}
于 2012-06-06T05:01:54.353 に答える