2009年11月24日

モバイル版 Google Analytics を PHP4 で動かす

 先日からサービスの提供が始まったモバイル版の 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 側の関数を使うようにしているのです。

 不具合等があれば、コメント欄などでご指摘ください。

posted by まいける at 12:32 | Comment(2) | TrackBack(1) | PHP
この記事へのコメント
このサイトを参考に修正しエラーも出ていませんが
PHP4では集計できません

他、何かチェックする事ありますか?
Posted by ネットマン at 2010年02月24日 12:54
ネットマンさん

コメントありがとうございます。私の環境でも、エラーは出なくなるものの、集計できない場合があります。

Google Analytics の結果に反映されるまでにタイムラグがあるため、問題の切り分けをしながら試すのも難しく、原因究明には至っていません。

また何かつかめたらお知らせしますね。
Posted by まいける at 2010年02月25日 00:02
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/33833075
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

[Web][モバイル]Google Analitics MobileをPHP4で使えるようにする
Excerpt: 先日発表され、正式に使えるようになったGoogle Analyticsの携帯版ですが、用意されているPHP版のトラッキングコードはPHP5に対応していてPHP4では動かない関数がまじっている! これ..
Weblog: くらげだらけ
Tracked: 2009-12-03 12:09