本家XOOPSの最新版が走るようになった!

ユーザ会サイトはほぼ完璧に近い形で復元することができた.とは言え,ネット上で公開するためにはまだ大きな関門がある.現在のネット上のサーバーで走っているのはPHP7なので,xamppとXOOPSをアップデートしてPHP7で実行可能な環境を構築し,その上でサイトを運用できるようにしなくてはならない.xampp7はすでに稼働しているのでXOOPSの最新版を導入するだけのことだが,かなり手こずっている.XOOPSには2つバージョンがある.一つは公式版のXOOPS Cube,もう一つはそれにX-Updateを追加して機能強化したXOOPS Xディストリビューションだ.どちらもXOOPS Cube Legacyをベースにしているので基本的には同じと考えられるが,前者は2012年頃にベータ版を公開した状態で更新が止まっている.この意味ではXOOPS Xという選択しかないと思われるが,インストールの時点でエラーが発生したりなどあまり完成度は高くないような印象がある.

XOOPS Xではエラーが発生するとそのタイミングで管理者パスワードを書き換えてそのアカウントをロックするような作りになっているように思われるが,エラーは頻発しているのでそのたびにパスワードの書き換えが必要になり,かなり使い勝手が悪い.X-Updateはモジュールの導入・更新を自動化するためのツールでこれが使えるとかなり便利になるような気もするが,常時ネットに接続しておかなくてはならないというのも不都合な点だ.もっともこの点に関しては従来のXOOPS Cubeでもアップデート情報などはネットから収集していたと推定されるので,大きな違いがあるという訳ではない.いずれにしてもこれを導入するためには自力でデバッグする覚悟がないとできないような気がする.実際,PHP7ではmysql系ではなくmysqli系の関数が使われるようになっているが,XOOPS Xの配布版の中にはいまだにmysql系への呼び出しが残っているように思われる.

ユーザ会サイトを復活できなければそれはほとんど同時にゼルコバの木ユーザ会の解散を意味することになると考えられるから,この関門はどうしても突破しなくてはならないと思われるのだが果たして可能だろうか?ここまでたどり着くだけでもすでにかなりの時間を費やしている.下手をすると,ゼルコバの木ユーザ会の存続どころか,ゼルコバの木自体の倒壊にまで繋がりかねないという危機的な状況と言ってよいのではないか?実際,たとえばXOOPS Cubeという活動などはそのような事態の典型例と言ってよい.ともかく今はここに全力を注入して活路を切り開いてゆくより他はない.XOOPS Cube版でも不具合が噴出するという状態になっているので,選択肢としてはXOOPS Xを導入してそれを自力で作動するところまで持ち込むしかないと考えられる.場合によってはPHPのデバッグ環境まで必要となるかもしれないが,退路を断ち切って前に進むしかないだろう.まず,始業時バックアップから始めるとしよう.と言っても仕掛版は一旦廃棄なので単にリネームしておくだけということになる.

いや,XOOPS Xの仕掛版は昨夜のうちにすでにリネームして廃棄状態になっているようだ.legacy-corepack_20180208が現在最新版のXOOPS Xだ.XOOPS Cubeのバージョンは2.2.xampp7は64ビット版でApache 2.4.41,MySQL 7.4.2,PHP 7.4.2,phpMyAdmin 5.0.1で走っている.PHP拡張はmysqli, curl, mbstringが入っている.OA00090878をデータベースユーザとして登録した.データベースサーバの種類はmysqli.データベーステーブルはすべて問題なく作成できた.管理者adminを登録する.これでインストール第1ステップは完了だ.第2ステップでXOOPS Cubeの必須モジュールが導入される.おそらくこの手順ではネット接続が不可欠と考えられるので開発機をネットに出すことになる(説明書きにはそのような記述はないが…).ここまでの手順で無数の警告が出力されているがすべて無視している.この時点で表示されている警告には以下がある.

Deprecated: Function get_magic_quotes_runtime() is deprecated in D:\XOOPS X\html\install\class\textsanitizer.php on line 32

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XCube_Root has a deprecated constructor in D:\XOOPS X\html\core\XCube_Root.class.php on line 37

Warning: Cannot modify header information – headers already sent by (output started at D:\XOOPS X\html\core\XCube_Service.class.php:121) in D:\XOOPS X\html\install\wizards\install_nextStep.inc.php on line 11

最後のWarningを除いて上記のDeprecatedメッセージは無数と言っていいくらい出ている.このステップでは画面は更新されずにエラーメッセージだけが表示された状態になっている.多分この画面は「戻る」かないし「再描画」で消える可能性はあるが,一応調べてみることにしよう.この障害の発生にはいろいろな原因があるようだが,可能性が高いのはスクリプトがUTF-8BOMで保存されているという可能性だ.⇒いや,「エラーメッセージ」が出力されるだけでこの障害は起きる.「HTTP ヘッダーを変更する関数より前の文で PHP の Warning や Notice エラーがある場合、それがすでにアウトプットされているため、このエラーが起きます。」つまり,構文的にはこの動作はノーマル動作ということになる.

アウトプットバッファリング(出力制御)による回避という手がある.output_bufferingをphp.iniないし.htaccessで設定しておくとこの問題を回避できる.⇒xamppコントロールパネル→Config→PHP(php.ini)で設定変更したが動作は変わらない.xamppのダッシュボードを開いてチェックしてみたが,output_buffering=4096となっている.倍増して8192としてみたが変化なし.php.iniでerror_reportingやdisplay_errorsをオフにするという手もある.⇒php.iniではerror_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICTという設定になっている.この設定ならDeprecatedエラーは表示されないはずなのだが…display_errorsをオフにしても何の変化もない.PHP.iniのパスが通っていないのだろうか?前にどこかでApache/binにphp.iniが入っていたのを見た記憶がある.コピーしてみよう.⇒変化なし.

error_reporting=E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

のようにしても同じ.localhostでアクセスするとログイン画面になるが,「このサイトはただいまメンテナスです.後程お越しください.」が表示されている.PHP.iniの設定が動作にまったく反映されないというのはどういうことだろう?エラーが発生する画面を回避して,localhostを開くと[以下のモジュールが導入されていません]の画面に出る.

image

ここでもDeprecaedが多数出ているのでおそらく管理者パスワードは書き換えられているのだろう.いや,まだ壊れていなかった.画面を戻る,ようやくXOOPS Xのフラッシュ画面に出る.一応動作しているので,ここまでの不良には目をつぶって前に進むことにしよう.導入・アップデート管理のモジュールではインストール済モジュールとインストール可能なモジュールのテーブルが表示される.一括操作が可能なので必要なモジュール(recommenedを含む)をすべてインストールしておくことにする.

  • bulletin
  • cubeUtils
  • d3forum
  • mobile_templates(recommended)
  • pico
  • search
  • xpress
  • hypconf(recommended)
  • happy_linux
  • weblinks

XOOPSに入っていてXOOPS Xに入っていないモジュールとしては以下がある.

  • changemail
  • dbtheme
  • download
  • evennews
  • extras
  • hdLegacy
  • iframe
  • legacyRender
  • mantis
  • pm
  • resendmail
  • resetuname
  • smartfaq
  • stdCache
  • tellafriend
  • user

一括操作のためのチェックボックスは付いているが,操作できなかった.protectorはインストールできたが,messageはできなかった.個別インストールはできるのでやってみよう.xpressのインストールでは以下のエラーになる.

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; Bulletin has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletin.php line 10 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; relation has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\relation.php line 3 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinTopic has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletinTopic.php line 6 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinGP has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletingp.php line 2 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterAbstract has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 4 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterHandler has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 35 (1)
Deprecated [PHP]: Function get_magic_quotes_gpc() is deprecated in file D:\XOOPS X\html\core\XCube_HttpContext.class.php line 197 (2)
Deprecated [PHP]: Function get_magic_quotes_gpc() is deprecated in file D:\XOOPS X\html\core\XCube_ActionForm.class.php line 309 (1)
Deprecated [PHP]: Function get_magic_quotes_gpc() is deprecated in file D:\XOOPS X\html\class\module.textsanitizer.php line 238 (4)

しかし,画面を戻るとインストールされているようだ.picoはインスールしているのに表示されない.アップデート可能なモジュールが4個ありますでlegacy, altsys, protector, xupdateをアップデートする.xupdateの更新ではエラーが出た.

Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; Bulletin has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletin.php line 10 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; relation has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\relation.php line 3 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinTopic has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletinTopic.php line 6 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinGP has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletingp.php line 2 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterAbstract has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 4 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterHandler has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 35 (1)

この後はlocalhostでもエラーが出るようになる.しかし,再描画で戻れた.アップデート可能なモジュールがまだ1個残っているが,このボタンを押すだけでエラーになってしまう.

Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; Bulletin has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletin.php line 10 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; relation has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\relation.php line 3 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinTopic has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletinTopic.php line 6 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; BulletinGP has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\bulletin\class\bulletingp.php line 2 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterAbstract has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 4 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; ProtectorFilterHandler has a deprecated constructor in file D:\XOOPS X\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 35 (1)

しかし,Deprecated だけなので前に進めてもよいはずなのだが…この画面を再描画すると例のERROR TOO MANY REDIRECTが起こる.ネット上に次のような書き込みがあった.

xampp最新版はPHP 5.3.0 になったようですが、XCLは現状PHP 5.2以下でないと正しく動作しないようです。少し古いバージョンをお試しください。

この記事の投稿日付は2009/9/12なのでかなり古いが,XCLがPHPの上位バージョンに対応していないというのは事実であるような気がする.http://xoops.ryus.co.jp/modules/d3blog/details.php?bid=267 の記事を参考に

error_reporting = E_ALL & ~E_DEPRECATED
としたら警告は消えたような気がする.いや,まったく効いていない.
error_reporting = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_STRICT & ~E_RECOVERABLE_ERROR
としてみたが効果なし.このエディタのデフォルトフォントがいつの間にか変わってしまったのも使いづらい.デフォルトフォントを設定できるオプションが見つからない.
エディタも壊れてしまったのだろうか?右端で折り返さなくなってしまった.どうも,何もかもが思ったように動かなくなってきているような気がする.

どうも訳が分からない.今度はメイリオ9.6というのがデフォルトフォントになってしまった.しかも上の方の段落がすべて枠で囲まれたようになっている.HTMLのスタイルを見ると下図のようにグレーの帯が入っている.

image

どういうことなのだろう?何が起きているのかさっぱり分からない.開発機を外に出したのがまずかったのだろうか?2009/9/10の日付で「PHP5.3でXOOPSを動かす」という記事があったが,表紙画面を出すまでに相当苦労した様子が伺える.検索ツールの動作にも疑問がある.DEPLICATEDをxampp7で検索して,エクスプローラ,Meryともにヒットゼロだった.E_DEPLICATEDで検索するとエクスプローラは7ファイル,Meryは79箇所を検出した.単語単位の検索ではないのでDEPLICATEDでヒットゼロというのは腑に落ちない.エクスプローラはE_DEPLICATEDでは検出しているが,Meryと比較するとかなりの見落としがある.

おかしい.今度はMeryがDEPLICATEDで7133個見つけて来た.何かミスっていたのだろうか?いずれにせよ,エクスプローラの検索がほとんど当てにならないことは確かだ.大文字のDEPLICATEDでは796個ヒットした.ファイル名で表示すると167本あった.PHPファイルに限定すると42本ある.これらのほとんどはphpMyAdminの中に入っている.それらを除くと以下の3本しかない.

C:\xampp7\php\pear\PEAR\ErrorStack.php(373):
C:\xampp7\php\pear\PEAR\Downloader\Package.php(220):
C:\xampp7\php\pear\PEAR\Downloader\Package.php(236):

ということはおそらくErrorStack.phpの動作と見てよいのではないだろうか?しかし,このファイルの中を検索してもDEPLICATEDという文字列は出てこない.いや,検索している文字列が違う.Passingというテキストを探した結果になっている.MeryでもDEPRECATEDはヒットゼロになる.E_DEPRECATEDなら見つかるという動作は同じだ.上記検索はスペルを間違えている.DEPLICATEDではなくDEPRECATEDだ.MeryではDEPRECATEDで7132,ファイルで7133本,PHPファイルで1486本検出された.Meryの検索ボックスを開くときテキストを選択しているとそれが検索対象となるので注意が必要だ.これらのファイルはほとんどphpMyAdminに入っている.phpフォルダに限定すると128箇所だ.これだけ本数があると,どこでメッセージを出しているかを突き止めるにはデバッガを使うしかないような気がする.いずれにしてもエラーメッセージを出力しているのはPHPと考えられるので問題はむしろxamppにあるということになりそうだ.まぁもちろん,XOOPSはDEPRECATEDを一掃すべきであることは当然だが…

picoをX-Updateを使わないでインストールできるかどうか試してみよう.picoとmessageはダウンロードだけは済んでいるようだが,インストールで失敗している.DEPRECATEエラーが6件起きているが,エラーは発生していない.この動作はXOOPS Cube本体動作なので本体が対応していないために起きていると見るしかないだろう.XOOPS Cubeの開発は2012年頃にはストップしているので,PHPの新しいバージョンには対応していないものと見られる.それではXOOPSのユーザはどうやってそれに対応しているのだろう?古いバージョンのPHPをXOOPSの中に抱え込んで動作させるということは可能だろうか?いずれにしてもDeprecatedの警告が表示されないようにしない限りはどうにもならない…

PHP7環境でXOOPS Cubeを動かすには
http://ryus.co.jp/staffblog/xoopscube-on-php7/

「現在公開されてる最新版のXOOPS X(ten)はPHP7でうごきますので特別何かする必要はありません。」とあるが,現在テストしているXOOPS Xは最新版のつもりなのだが…リリースは2018/02/08でXOOPS Cubeの公式サイトのダウンロードページの日付と同じ.2018年以降にリリースされたバージョンでこれより後のものはない.GitHubにもパッケージがあるが,日付から見ると2012年でかなり古い.XOOPSの管理画面で見ると Distribution : XOOPS X(ten) 20181220 XC Legacyバージョン : XOOPS Cube Legacy 2.2.3 Beta 1のようになっている.また,PHPの設定ではセーフモード : オフ,最大実行時間 : 120 sec.,メモリ制限 : 512Mb,表示エラー : オフ,ショートオープンタグ : オフ,ファイルをアップロード : オン ( アップロード最大ファイルサイズ:40M, Post最大サイズ:40M ),マジッククオート : オフ,グローバル変数の登録 : オフ,出力バッファリング : オン,open_basedir : オフ となっていて,PHP.iniの修正が反映しているように見える.

PHPの設定を少し変更して再度localhostにアクセスしようとしたら以下のエラーになった.

Protector detects site manipulation. 

このエラーの対処法は http://xoops.ryus.co.jp/modules/d3blog/details.php?bid=378 にあるが,protector→一般設定で真っ白になってしまう.この記事の日付は2013年8月だ.この記事を書いているRYUSという会社のブログの更新も2018年12月頃で止まっている.どうもいよいよ終わりが近くなってきた雰囲気だ…XOOPS 2.5というのが存在する.本家XOOPSにはXOOPS 2.5.10 release 2019/04/29というのがある.これはPHP7.3 MySQL 8.0で動作する.language packageも提供されている.⇒ダウンロード→XoopsCore25としてインストール.こんな画面から始まる.

image

言語は英語しか選択できない.次の画面では以下の2つのフォルダをdocument root の外に置いてリネームしておくことを強く勧められる.①xoops_lib, ②xoops_data.このパッケージにはxoops_trust_pathというフォルダが存在しないが,これら2つのフォルダを外に置くことはそれと同等と言ってよいだろう.さらに,xoops_dataフォルダの中に7つの階層化したフォルダをあらかじめ作っておくことが求められる.⇒これらのフォルダはすでに作り込んである.xampp7に入っているのはMySQL 7.4.2だが,MySQL 8.0ではdefault-authentication-pluginmysql_native_password を設定することが求められる.

Recommended extensions でチェックのついていない Iconv(Internationalization functions extension)というのがある.日本語サポートのために必要になりそうな気もするが,ここでは無視して進もう.xoops_dataとxoops_libを残しておいたらそれを使おうとしているようだ.⇒マニュアルで書き換えればよい.Databaseにはmysqlという選択肢しかない.データベース名はoa00090878_babalabo,データベースユーザはOA00090878,prefixはzelkova,characeter setはUTF-8 Unicode(utf8mb4),collationはutfmmb4_general_ci(Default)とした.SALTを設定するボックスはなかった.データベースを一旦削除.⇒すべてのテーブルの作成に失敗している!⇒最初に空のデータベースを作っておく必要があった.

Wrote XOOPS GPL License Key: e6b4bb-a76f42-991dcd-0647fa-14a9b1

Debug mode はデフォルトでオフになっている.デバッグモードには3種類ある.①inline, ②popup,③smarty.Smarty Templates Debugモードにしてみよう.これでデフォルトテーマの選択画面に入れた.

image

と言っても選択肢は3つしかない.うちグラフィックなテーマは上図だけだ.モジュールのインストレーション画面に出た.これまで何度も失敗しているところだ.①Private Messaging, ②User Profile,③Protector がインストールされる.すでにサイトは見えるようになっている.最後にSecurity configurationとしてmainfile.phpが読み取り専用になっていること,install_remove_f9580686575e6808b413dda フォルダを削除しておくことが求められる.管理者メニュー画面はこんな感じだ.

image

モジュールは自分で探しにゆかなくてはならないが,Module Repositioryというのが整備されているのでその中で探せば大概見つかりそうだ.初めてデバッグコンソールが出てきた.

image

tplという耳慣れない拡張子を持ったファイルが並んでいる.どうもこれがSmartyのTemplatesというものらしい.少なくともHTML出力されるのではないので,動作が止まってしまうということは起こらないだろう.公開版ではそれも止めることができる.ともかくこれでPHP7で動くXOOOPSを手に入れることができた.これからはいろいろな情報を収集するのに積極的に英語圏で活動しなくてはならなくなりそうだ.しかし,果たしてこのXOOPS最新版にあの古いユーザ会サイトのコンテンツを移植することができるだろうか?

“本家XOOPSの最新版が走るようになった!” への2件の返信

  1. ブログみていただきありがとうございます。
    忙しすぎて最近全然更新できてなくてすみません^^;

    ざっくりモジュールリストをみた感じではPHP7環境で動くようにするのは困難かなと思います。
    XOOPS Xで配布されてない各モジュールは、おそらくPHP7でまともにうごかないはずです。(XOOPS Xでインストールできるモジュールでも場合によってはエラーになるのもあるとは思いますが)

    登録されてるデータ量がすくないモジュールは、何かしら代替えモジュールをさがしてコピペでデータを移すのがよいかなと思います。

    1. コメントありがとうございます。XOOPS X への移行は断念しました。現在は本家XOOPSに乗り換えるという方向で作業を進めています。一部のモジュールが使えなくなるのは避けられませんが、今のところ順調に進んでいます。最悪の場合でも、まるごとWordPressに移植という手は残っているのでなんとかなるだろうと思っております。

龍司@RYUS へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA