XOOPSからWordPressへ徐々に移行中ではありますが、未だにXOOPSで動いているサイトがあります。
そこはPHP5.6でなんとか動いているのですが、WordPressがとうとう「PHP5.6環境だとセキュリティアップデートできなくなるよ」という宣言をし始めてしまいました。
急にサーバをPHP7系にしろといわれても対応できないので、とりあえず「XOOPS」をPHP7.4でも動くようにする方法を確立しておこうと、テスト環境でいろいろといじってみました。
基本的に、こちらの「PHP7対応手順。XOOPSの場合はここだよ」の記事を見ました。
PHP7にできるんだ!と希望をくれたサイトです。ありがとうございました。
まずは、PHP5.6で変更したいXOOPSが動くテスト環境を作ります。そして、PHP7.4に切り替えます。
もちろん、真っ白になります。「PHP7対応手順。XOOPSの場合はここだよ」を順番にしていきます。
mainfile.phpのdefine(‘XOOPS_DB_TYPE’, ‘mysqli’);
この記事で勉強になったのは、mailfile.phpで、「define(‘XOOPS_DB_TYPE’, ‘mysqli’);」に変更することで、データベースの接続部分をmysqliに変えれるということ。PHP5系からPHP7系に帰るのに、mysqlからmysqliに変えるのが、パラメーターの位置とかも変わるので、面倒そうだと思ってましたが、さすが用意してありました。
あとは、「define(‘XOOPS_DB_HOST’, ‘localhost:3306’);」と「localhost」から「localhost:3306」に変えるのは私のテスト環境では不要でした。環境に寄りけりかなと思います。
モジュールのアップデートはしない
XOOPSコア上書きはしましたが、モジュールのアップデートは現時点ではしませんでした。コアの上書きのあと、サイトは真っ白なままなので、管理画面でのアップデートができなかったからです。
ファイルの入れ替えかなと思ったのですが、アップデートのためのモジュールファイルも見つけられず。とりあえず進めることにしました。
真っ白。define(‘OH_MY_GOD_HELP_ME’, true);でエラーを表示してつぶす。
Warningとかいっぱい出てきますが、とにかく今は「FatalError」をつぶしましょう。
よく出てきたエラーは
parse error: syntax error, unexpected ‘new’ (t_new)
です。「Parse error: syntax error, unexpected ‘new’ (T_NEW) in」の記事を参考にしました。
「php7では新しいオブジェクトを参照渡しで代入ができない」ということで、「=& new」となっている「=&」の&を消していきました。「bulletin」「pico」「d3pipes」「wizxc」モジュールからのエラーでした。
大体50カ所ぐらい修正しました。(※中ページの表示テストをしているうちに、膨大な量になっていくことになりました…)
参考にした「PHP7対応手順。XOOPSの場合はここだよ」で、PHP7動作不可とあった「d3pipes」モジュールが動いていたので、この修正で動くようになるのではないかと思います。
あとは、2か所だけですが
fatal error: uncaught error: call to undefined function ereg_replace()
と言うのが出ました。これは主に「bulletin」モジュールの古いバージョンで出ました。
こちらは、「PHP7.0にアップグレードした時に遭遇したエラーと対処法」の記事を参考にいたしました。
ereg_replace()をpreg_replace()に切り替えて、正規表現の中の最初と最後に「/」を追加する。
「PHP7.0にアップグレードした時に遭遇したエラーと対処法」
という方法で回避しました。
Warningはたくさん出ていますが、真っ白ではなくなりました!
メンテナンス中のログイン画面が表示されます。
ログインすると新しく必要なモジュールのインストールを促されましたので、インストールしました。
管理画面が出て、メンテナンスモードも解除されて、公開画面が表示されました!!やったー!!
XOOPSのバージョンとPHPのバージョン
XOOPS Cube Legacy 2.2 → XOOPS Cube Legacy 2.2.3 Beta 1(Distribution : XOOPS X(ten) 2018122)
PHPバージョン : 5.6.39 → 7.4.3
となりました。
さて、あとは表のページが本当に動いているかと、更新時にエラーがでないかのテストが必要です。
モジュールのアップデートをしたら、サイトのブロックが消えていった。
さて、ちゃんと表示されるようになったのは、トップページだけで、picoなどはうまく表示されていません。
管理画面にも入れるようになったので、モジュールのアップデートをしてみることにしました。
いつものように「互換モジュール」で表示されるモジュールリストのアップデートをクリックしてもうまくいかないので、新しく追加した「導入アップデートの管理」より行いました。
「pico」
リストで同じコンテンツデータを取得していたのがバラバラのデータを取得できるようになった。
つまり、
会社概要
・あいさつ
・理念
・沿革
という構造だったところが
会社概要
・沿革
・沿革
・沿革
になっていたのが直りました。
しかし、ページの中身が取得できていない(※コンテンツ編集などでは表示される)。
「bulletin」
アップデートをしたら、リストが全部消えました。
権限がどうのこうのという警告が表示されました。
管理画面では記事が見えているので、全部消えたわけではなさそうです。
が、権限に引っかかるたびに、ログアウトされるのでちょっとつらい。もしくはログアウトされるから権限にひっかかるのか?
「d3pipes」
アップデートしたら、ブロックも消えました。
管理画面では設定が見えているので、全部消えたわけではなさそうです。あとで直します。
と、主たるモジュールをアップデートしたら、ブロックの設定から全部変わったようで、消えました。
ちょっと想定外です。
せっかくなので、アップデートしたファイルは保存しておいて、一旦モジュールアップデート前まで戻すことにします。
非常に疲れたので、今日はひとまずここまでにします。
(20230809追記)
Xoops Cube Legacyをphp7で運用する方法を模索
https://www.onwil.com/modules/wilforum/index.php?post_id=707
参考にしたいのでメモメモです。
コメントを残す