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

19年12月15日(Sun) 1時26分
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」モジュールストアに含まれています。

Comments list

Posts tree


nao-pon  Posted on 2015-4-17 0:19

見た限り、ほぼエラーは表示されなくなったかな。まあ、とりあえずはこんな感じでいいでしょう。 :-)

あと、

878b35b8.png

ついでに、管理画面にディストリビューションのバージョンも表示するようにしてみた。

9fbbeb60.png

それから、モジュール管理のモジュールアイコンをクリックでそのモジュールの管理画面に飛べるようにしてみた。

nao-pon  Posted on 2015-4-21 22:57 | Last modified
b4230498.png

あれから、ちまちまと修正を続けて、pilot バージョンとして、「XOOPS X (ten) 20150312.0421.1」になりました。

X-update で取得できるモジュールで私が直接手を入れられるストア「Xoops X (Ten) - GitHub」「nao-pon - GitHub」「Happy Linux」のモジュールに関しては、さらっとみた限り、エラーは出ていません。しかし、まだ気付いていないところがあると思うので、何かお気づきの点がありましたら、お知らせ下さい。 :-)



Post a new comment

Subject
guestname
Body

Go to richer form

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: 2341, today: 1, yesterday: 1
Princeps date: 2015-04-15 (Wed) 10:59:59
Last-modified: 2015-04-15 (Wed) 10:59:59 (JST) (1704d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 50 人がオンライン中 :-)
(UsersWiki : 3 人)

登録ユーザ: 0 & ゲスト: 50

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4623


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報