Google Analytics MobileをPHP4で使えるようにする

先日発表され、正式に使えるようになったGoogle Analyticsの携帯版ですが、用意されているPHP版のトラッキングコードはPHP5に対応していてPHP4では動かない関数がまじっている!
これに気づかずに1日ログが取れなかった…orz

今時PHP4はつかってねぇーよ!っていう方もいらっしゃると思いますが、同じようにログが取れなかったー…orzという方のためにエントリーを書いておこうと思います。


具体的には、アクセス解析用のga.phpというファイル(トラッキングコードを埋め込むときにDLして使うヤツ)のsetrawcookie()とfile_get_contents()で引っかかります。

setrawcookie()はPHP5の関数でPHP4では使えないです。
file_get_contents()はPHP4.3.0以降で登場し、仕様に違いがあるようなので、それを何とかしないといけないです。


ということで、まずPEARでPHP_Compatをインストール!

pear install PHP_Compat-1.6.0a2


さらにga.phpの先頭部分でライブラリを読み込んでおきましょう。

require_once 'PHP/Compat/Function/setrawcookie.php';
require_once 'PHP/Compat/Function/file_get_contents.php';


97行目・100行目のfile_get_contents を php_compat_file_get_contents に書き換えます。

さらに144行目あたりのsetrawcookie()を次のように書き換えます。

setrawcookie(
    COOKIE_NAME,
    $visitorId,
    $timeStamp + COOKIE_USER_PERSISTENCE,
    COOKIE_PATH,
    '',
    false,
    false
);

第5,6,7引数にfalseとか入れてるだけですが、これがないと引数入れろと怒られます。
これでOKのはず…

参考にした「Trend Antenna 開発日記」さんの「モバイル版 Google Analytics を PHP4 で動かす」にも書いてあるとおり、

file_get_contents は、PHP4.3.0 以降ではすでに登場しているため、PHP_Compat::loadFunction を使う PEAR PHP_Compat の通常の使い方だと、PHP ネイティブの関数が優先されてしまいます。そこで、上記のように個別の関数を手動で読み込んだうえで、PHP_Compat 側の関数を使うようにしているのです。

ということで、このような変更を行っています。

ga.phpにアクセスしてもエラーは出なくなっているので、たぶん大丈夫だと思います。