View on GitHub

akkunchoi.github.com

PHP5.3.xの問題あるバージョン

5.3.3以前

今まで正常に動作していたPHPのアプリケーションが、突然ランダムにページが表示されたり、エラーになったりするという現象に遭遇しました。

ソースコードを追っていくと

# 
// こんな感じのクラス
class Obj{ 
  function call(){
    $this->hogehoge(); // 何故か Call to a member function 'hogehoge' on a non-object
  }
  function hogehoge(){
  }
} 

// 確かにインスタンス化している
$obj = new Obj;
$obj->call();

上記のような感じで、ありえない話ですが何故か$thisが non-object になっていました。

色々調べたところ、Symfony2のREADMEに同じような問題が書いてありました。

before PHP 5.3.4, if you get “Notice: Trying to get property of non-object”, you’ve hit a known PHP bug (see https://bugs.php.net/bug.php?id=52083 and https://bugs.php.net/bug.php?id=50027);

gc関連のバグのようで、5.3.4で修正されているようです。Apacheを再起動すると現象が発生しなくなる、という報告もありました。

自分で管理しているサーバーではなかったためサーバー管理者に伝えた所、 apacheにHUPを送信することで現象は発生しなくなりました。

CentOS6はデフォルトのPHPが5.3.3なのが辛いですが、このバージョンのPHPを使うのは避けた方が良さそうです。

5.3.7以前

before PHP 5.3.8, if you get an error involving annotations, you’ve hit a known PHP bug (see https://bugs.php.net/bug.php?id=55156).

Symfony2のアノテーションがおかしい場合はPHPのバグみたいです。

また、5.3.7には重大なバグがあります。

5.3.16

PHP 5.3.16 has a major bug in the Reflection subsystem and is not suitable to run Symfony2 (https://bugs.php.net/bug.php?id=62715)

5.3.16はリフレクションがおかしいのでSymfony2では使えないみたいです。