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

18年9月23日(Sun) 7時07分
TOP » UsersWiki » nao-pon » blog » 2015-04-15

RSS of nao-pon/blog
2015 4月 15 (水)
 

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」モジュールストアに含まれています。

コメント一覧

投稿ツリー


nao-pon  投稿日時 2015-4-17 0:19

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

あと、

878b35b8.png

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

9fbbeb60.png

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

nao-pon  投稿日時 2015-4-21 22:57 | 最終変更
b4230498.png

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

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



新しくコメントをつける

題名
ゲスト名
投稿本文

より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 1782, today: 1, yesterday: 2
初版日時: 2015-04-15 (水) 10:59:59
最終更新: 2015-04-15 (水) 10:59:59 (JST) (1256d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証 | SSLログイン

新規登録 | パスワード紛失



メインメニュー
UsersWiki メニュー
付箋メニュー
付箋メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:
 
ブックマーク
オンサイトブックマークは
ログインするとご利用になれます
[ログインする]
サイト内 Wiki
☆ 検索 ☆



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

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

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

nao-pon
 

登録ユーザ数: 4564


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