PHP5だとmajavi2を使ったアプリが動かなくなる件
3年ぐらい前に友人に頼まれて作ったWEBアプリが動かなくなった。
原因はレンタルサーバにインストールされているPHPがPHP4から5にアップグレードされたためだ。
当時はPHP5対応版のmojavi3は開発版しかなかったので、mojavi2を選択したのだが、現在はどうなってるんだろう...
と思ったらwww.mojavi.org落ちてる...
これじゃmojaviフレームワークだけバージョンアップさせることもできない・・・
しかたなくエラー箇所を手動で修正する。
一つ目
FATAL [/Actionクラス名Action.class.php:23] date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead
date関数で”Asia/Tokyo・・”なんかのエラーが出る件:PHP5.1.0以降
php5でdate関数を利用する場合はタイムゾーンを設定していないとだめらしい。
date_default_timezone_set('Asia/Tokyo');
をdate関数を呼び出している直前に挿入して解決
二つ目
FATAL [viewクラス名View_success.class.php:6] Assigning the return value of new by reference is deprecated
PHP E_STRICTで表示されるエラーメッセージを調べてみた
new演算子の戻り値を参照で受け取ろうとする。
PHP5では[=]で参照渡しとなるのでインスタンス化したオブジェクトを[=&]で受け取る必要はありません。
ということなので=&をgrepして各所を修正
三つ目
FATAL [アプリケーションROOT/mojavi-all-classes.php:1340] Non-static method LogManager::getInstance() should not be called statically, assuming $this from incompatible context
PHP5を試してみる - エラーレベル「E_STRICT」
また、非staticメソッドをstaticに呼び出した時のワーニングも表示されるようになったようです。
ということなのでmojavi-all-classes.phpの中で非staticメソッドをstaticメソッドとして呼び出しているようなので、修正。
238行目あたりの
function & getInstance ()
をstaticメソッド指定にする
static function & getInstance ()