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

参考にしたいのでメモメモです。