IPアドレスから携帯のキャリアを高速に判定するsymfonyプラグインを作った
携帯サイトを作ってるとIPアドレスから携帯キャリアを判別することが多いですが、これを高速に判定するsymfonyプラグインを作りました。
元ネタ: PHPで高速に携帯ゲートウェイのIPから携帯キャリアを判別する - グニャラくんのグニャグニャ備忘録@はてな
やってることは大体同じです。
隣り合うIPアドレス帯をまとめている
各キャリアが公開しているIPアドレス帯は隣あった領域である事が多いので、連続したIPアドレス帯は一つにまとめるようにしてます。
これにより、検索領域が 1/3 ぐらいに減りました。
まとめたIPアドレス帯はキャッシュしている
まとめたIPアドレス帯はソートした後、キャッシュファイルに書き込むようにしてます。
前処理は最初の1回だけです。
バイナリサーチ
前処理されたIPアドレス帯はソートしてあるので、バイナリサーチしてます。
インストール(symfony 1.0)
僕はsymfony 1.0を使ってるので、バイナリパッケージを用意しました。
次のコマンドでインストールできます。
$ symfony plugin-install http://svn.openpear.org/sfMobileIPPlugin/pkgs/sfMobileIPPlugin-0.0.1.tgz
インストール(symfony 1.1以降)
試してないのでわかりませんが、たぶんこんな感じ。
使い方
sfMobileIP::carrier()を呼ぶとIPアドレスから判定して携帯キャリアの情報(docomo, ezweb, softbank, willcom, pc)を返してくれます。
echo sfMobileIP::carrier();
よかったら使ってくださいー。