読者です 読者をやめる 読者になる 読者になる

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 ()