object getInstance() (
string $filename [, int $flags]
)
このメソッドは、いわゆるシングルトンパターンを実装したものです。 Net_GeoIP のインスタンスを作成するには、 このメソッドを使用することを推奨します。
Net_GeoIP のインスタンスの作成
<?php
require_once "Net/GeoIP.php";
$geoip = Net_GeoIP::getInstance("/path/to/geoipdb.dat", Net_GeoIP::SHARED_MEMORY);
?>
アプリケーション内で複数のデータベースを使用したい場合は、 それぞれのデータベースに対して Net_GeoIP のインスタンスを個別に作成する必要があります。 シングルトンメソッド getInstance() を使用すると、 個々のデータベースに対応するインスタンスは常にひとつであることが保証されます。 これにより、データベース設定のオーバーヘッドを抑えることができます。
string $filename
-
データベースファイルの名前 (そこまでのパスも含む)。
int $flags
-
クラスの振る舞いを制御するフラグ。以下のクラス定数のいずれかです。
Net_GeoIp::SHARED_MEMORY - 複数の PHP インスタンスでデータベースを共有するために、 SHMOP を使用します。
同時に複数の Net_GeoIP インスタンスが共有メモリを使用することはできません。
Net_GeoIP::SHARED_MEMORY (shmop) を使用する場合は、単一のインスタンス (つまりひとつのデータベース) に対してのみしか使用できません。 それ以降に SHARED_MEMORY を使用したインスタンスを作成しようとすると、 すでに作成されているインスタンスと同じ共有メモリブロックを読み込んでしまい、 問題が発生します。というのも、 そこから読み込んだデータベースは期待しているものとは異なるからです。
Net_GeoIP::SHARED_MEMORY を使用した 2 つめ以降インスタンスの作成をとめるための エラーを通知する簡単な方法はありません。 また、2 つめ以降のインスタンスが共有メモリブロックを上書きするようにすることも (事実上) 不可能です。
簡単に言うと、複数データベースの環境で Net_GeoIP::SHARED_MEMORY を使う際には注意しましょうということです。
Net_GeoIp::MEMORY_CACHE - 現在のスクリプト内で使用するために、 データベースの中身をすべてメモリに格納します。
これは、スクリプト内で何度もデータベースにアクセスする際に有用です。
Net_GeoIp::STANDARD - 標準の形式で、キャッシュを行いません。 このパラメータを省略した場合のデフォルト値でもあります。