先日からサービスの提供が始まったモバイル版の Google Analytics ですが、アクセス解析用の PHP スクリプトである ga.php は PHP4 では動きません。PHP4 のアップデートはすでに終わっているので、PHP5 にアップグレードするべきなのですが、レンタルサーバなどで PHP のアップグレードをしてくれないところもあると思います。そこで、PHP4 でも動くように、ga.php を修正してみました(ライセンス的な問題がちょっと気になりますが…)。
準備として、PEAR の PHP_Compat をインストールします(stable版の1.5.0ではなく、alpha版の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( COOKIE_NAME, $visitorId, $timeStamp + COOKIE_USER_PERSISTENCE, COOKIE_PATH);
から
setrawcookie( COOKIE_NAME, $visitorId, $timeStamp + COOKIE_USER_PERSISTENCE, COOKIE_PATH, '', false, false);
に変更します。
これで動くようになるはずです(PHP4.4.9 の環境で確認)。
種明かしをすると、setrawcookie は PHP5 から新たに登場した関数です。また、file_get_contents のコンテキストサポート(第3引数)も PHP5 以降にサポートされたものです。このため、これらを使えるようにしなければなりません。setrawcookie は、PHP4 にもともとない関数ですので、それほど問題ない(せいぜい 1.6.0a2 をインストールすることと、引数を省略せずに記載することくらい)のですが、file_get_contents は、PHP4.3.0 以降ではすでに登場しているため、PHP_Compat::loadFunction を使う PEAR PHP_Compat の通常の使い方だと、PHP ネイティブの関数が優先されてしまいます。そこで、上記のように個別の関数を手動で読み込んだうえで、PHP_Compat 側の関数を使うようにしているのです。
不具合等があれば、コメント欄などでご指摘ください。
PHP4では集計できません
他、何かチェックする事ありますか?
コメントありがとうございます。私の環境でも、エラーは出なくなるものの、集計できない場合があります。
Google Analytics の結果に反映されるまでにタイムラグがあるため、問題の切り分けをしながら試すのも難しく、原因究明には至っていません。
また何かつかめたらお知らせしますね。