|
現: 2015-04-15 (水) 10:59:59 nao-pon |
| + | #navi |
| + | RIGHT:&rsslink(../); |
| + | #boxdate |
| | | |
| + | * XCL (XOOPS Cube Legacy) の PHP 5.6 対応 [#d7c639a0] |
| + | RIGHT:&tag(XCL,XOOPS,XOOPS X,PHP,PHP 5.6,プログラミング); |
| + | |
| + | &ref(site://modules/xelfinder/index.php/view/1910/logo-php56.png,right,mw:300,og); |
| + | |
| + | [[Raspberry Pi 2 をウェブサーバーに仕立てて:http://pi2.hypweb.net/xoopsx/]]、PHP 5.6 系で XOOPS X を動かしてみると、大量の "Unknown Condition [8192]: Non-static method 〜" というエラーが表示されます。((PHPデバグをOnにした場合)) |
| + | |
| + | 「ん〜これは修正したい!」という欲望に駆られて着手してしまいました。 :-D |
| + | |
| + | まずは、コアと XOOPS X でメンテナンスしているモジュールから手を付けます。 |
| + | |
| + | 一番多いエラーは、MyTextSanitizer::getInstance() のエラーです。 |
| + | |
| + | MyTextSanitizer クラスの getInstance() に static キーワードが付いていないのに、静的に呼び出しているのが原因です。PHP 5.6 以前は、E_STRICT エラーだったものが、5.6 以降は E_DEPRECATED エラーとして出力されるようになったので、5.6 以降の環境では、大量にエラーレポートされるようになったわけです。((XCL の PHPデバグでのエラーレポートレベルは "error_reporting(E_ALL ^ E_STRICT)")) |
| + | |
| + | 当初は、"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 で更新できます((pilot ブランチは、正式リリースの前に評価して頂くことを目的にしたブランチで、X-update の一般設定「非表示ストア(開発・先行版)も表示する」を「はい」にすることで表示される「For developer」モジュールストアに含まれています。))ので、テスト環境をお持ちの方は、ぜひ問題点をレポートして頂けると助かります。 |
| + | |
| + | RIGHT:&font(90%){&page_comments;}; |
| + | #navi |