hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

TOP » UsersWiki » nao-pon » blog » 2015-04-15

RSS of nao-pon/blog
Wed 15 Apr 2015
 

XCL (XOOPS Cube Legacy) の PHP 5.6 対応 anchor.png

logo-php56.png

Raspberry Pi 2 をウェブサーバーに仕立てて、PHP 5.6 系で XOOPS X を動かしてみると、大量の "Unknown Condition [8192]: Non-static method 〜" というエラーが表示されます。*1

「ん〜これは修正したい!」という欲望に駆られて着手してしまいました。 :-D

まずは、コアと XOOPS X でメンテナンスしているモジュールから手を付けます。

一番多いエラーは、MyTextSanitizer::getInstance() のエラーです。

MyTextSanitizer クラスの getInstance() に static キーワードが付いていないのに、静的に呼び出しているのが原因です。PHP 5.6 以前は、E_STRICT エラーだったものが、5.6 以降は E_DEPRECATED エラーとして出力されるようになったので、5.6 以降の環境では、大量にエラーレポートされるようになったわけです。*2

当初は、"error_reporting(E_ALL ^ E_STRICT ^ E_DEPRECATED)" にしてしまおうと思いましたが、E_DEPRECATED を隠してしまうと、将来サポートされなくなる問題点がわかりづらくなってしまうので、error_reporting はそのままにして、コード修正を行うことにしました。

本来なら MyTextSanitizer::getInstance() に static キーワードを付ければいいのですが、MyTextSanitizer クラスはモジュール側で継承クラスを持っていることが多く、安易に static キーワードを付けてしまうと Fatal エラーになってしまいます。

そこで、新しく static なメソッド sGgetInstance() を作って対応することにしました。

モジュール側では、

$ts =& MyTextSanitizer::getInstance();

としているところを

(method_exists('MyTextSanitizer', 'sGetInstance') and $ts =& MyTextSanitizer::sGetInstance()) || $ts =& MyTextSanitizer::getInstance();

などとします。

正規表現で置換するなら

(\$[\w>-]+)\s*=(\s*&)?\s*MyTextSanitizer\s*::\s*getInstance\s*\(\s*\)

(method_exists('MyTextSanitizer', 'sGetInstance') and $1 =$2 MyTextSanitizer::sGetInstance()) || $0

に置換するとよいと思います。

これらの一連の修正を、コアに関しては XOOPS X の pilot ブランチ、そして XOOPS X リポジトリのモジュールに対して行いました。ただ、まだまだ修正漏れやその他のエラーが表示されますので引き続きひまひまに作業していきます。

X-update で更新できます*3ので、テスト環境をお持ちの方は、ぜひ問題点をレポートして頂けると助かります。



*1 PHPデバグをOnにした場合
*2 XCL の PHPデバグでのエラーレポートレベルは "error_reporting(E_ALL ^ E_STRICT)"
*3 pilot ブランチは、正式リリースの前に評価して頂くことを目的にしたブランチで、X-update の一般設定「非表示ストア(開発・先行版)も表示する」を「はい」にすることで表示される「For developer」モジュールストアに含まれています。

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 325, today: 1, yesterday: 2
Princeps date: 2015-04-15 (Wed) 10:59:59
Last-modified: 2015-04-15 (Wed) 10:59:59 (JST) (2107d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
最近の更新
オンライン状況
105 人のユーザが現在オンラインです。 (3 人のユーザが UsersWiki を参照しています。)

登録ユーザ: 0
ゲスト: 105

もっと...
サイト情報