2014年7月11日金曜日

Strict Standards Error in Joomla

頼まれて管理していたHPを久しぶりに覗いてみたら、あけてびっくり

ページいっぱいに次のようなエラーメッセージのオンパレード!
Strict Standards: Non-static method DB::parseDSN() should not be called statically, assuming $this from incompatible context in xxxxxx.php on line 520

調べてみるとレンタルサーバー会社が知らないうちにPHPをバージョンアップした結果、今までは出ていなかったStrict Standards Errorが表示されるようになってしまったらしい。

この時はPHPのバージョンを下げることによってエラーを消すことができたけど、今度はXAMPPを使ってローカルでJoomlaをいじくっていたところ、インストールしたモジュールが古かったらしくまた例のエラーが出た。前のようにPHPのバージョンを下げるわけにもいかず方法を探していたら、よく似た事例を発見。

以前のコードが最新phpでは推奨されないとして警告・エラーになる場合があります。
今回の例では、
chapter4_6/index.php : 30行目
$cms =& new CMS($CONFIG['dsn']);

$cms = new CMS($CONFIG['dsn']);
とはいっても私のケースはphpのバージョンも違うのでうまくいくかどうかははなはだクエスチョンマークだったけど、とにかくエラーだと表示された行を見てみた。
構造はよく似ている。それで、書いてあったように 「&」を消してみると。。。。
うまくいった(まぐれか??)。

最後にこの構文のとはまったく違うエラーメッセージだけが残ったがこれについては「display_errors=off 方法」で検索をかけると解決策が見つかった。

そこで出てきた「誰かのホームページ」にいわく

1. php.iniで指定する場合。

※ Webサーバ(Apache)の再起動が必要です。
;エラーを出力しない場合
display_errors = Off

;エラーを出力する場合
display_errors = On


2. PHPソースで指定する場合。

// エラー出力しない場合
ini_set( 'display_errors', 0 );

// エラー出力する場合
ini_set( 'display_errors', 1 );




ようは、display_errorsをOffにすればいいということらしい。

XAMPPの場合は直下にあるphpファイルの中にあるphp.iniを書き換えることができたのでこのような発見ができた。レンタルサーバーでアップしているHPのほうも試すことができればやりたいがこれについてはphp.iniをいじる方法を探して見なくてはならないようだ。