ゼルコバの木ユーザ会サイトのトップページが表示された

XOOPS X の最新版をインストールした.PHPのバージョンの問題が尾を引いていると見えて不具合はあちこちで噴出してくるが,強引に押し込んでとりあえず何とか動く状態にはなっている.方針を変更してこの上にユーザ会サイトイメージを逆移入してみるということにしたのだが,果たして可能だろうか?MySQLはテーブル単位のインストールができるのでそれぞれのテーブルが完全に独立した作りになっていれば,それらを個別にインポートすることで動作させるようにできる可能性はあるが,見通しとしてはかなり難しいのではないかという気がしている.従って,ここでの課題は「このような方針のもとでどこまで復元できるか?」ということになる.ユーザ登録テーブルに関しては完全にクリアできたと言ってよいと思われるので,重点は①マニュアル(オンラインヘルプ)と②作業ログ(屋根裏部屋)が復活できるか否かという点に掛かっている.

データベースのバックアップには150個くらいのテーブルがあったはずだが,XOOPS Xに載せているのはユーザテーブルを入れても42個しかない.また,これら42個もこのまま使えるというものではないので差し替えないし改編を必要とするものと考えられる.少なくとも作業ログを閲覧するためには xpress というモジュールが必要だ.マニュアルを編集するために使っていたのはpicoというモジュールだったと思う.データだけでなくそれらを表示する場所も必要なのでブロックテーブルなども必要になってくるはずだ.フォーラム用のモジュールとしてはd3forum,ニュース配信用のbulletinが入っていたが,ゼルコバ通信の発行にはevennewsを使っていたのではないかと思う.mantisはかなり大きいモジュールだが復元できなければそれはそれまでだ.smartfaqというFAQ用のモジュールもあった.とりあえず,XOOPSからすべてのモジュールをコピーしてみよう.

XOOPSにはpicoとpmというモジュールは入っているが,それ以外は何も追加されていない.「自家サーバ」には旧バージョンを含めて33個のモジュールが入っている.おそらくこれがすべてだろう.XOOPSXが49MB,xamppが1GBある.XOOPSXの49MBはいいとして,xamppの1GBを毎日バックアップするのは大変だ.MySQLだけで555MBある.phpMyAdminは50MBだ.phpMyAdminはともかくMySQLはバックしなくてはならないだろう.XOOPSXというフォルダ名をXOOPS Xに変えた.

起動して再ログインしようとしてエラーになった.パスワードがまた書き換えられている.protectorは完全に停めてあるはずなのだが…「自家サーバー」からmoduleとxoops_trust_pathの全内容をコピーした.どうもどこかでパスワードが書き換えられているような気がする.ログインした時点で書き換えが起きている.いよいよPHPのデバッグをやるしかないのだろうか?コピーしたprotectorもリネームして完全に止めたのだが,まだ再発する.モジュールとテーマを完全に補充し,データベースを復元してlocalhostでXOOPS Xを開こうとしたら以下のエラーになった.

Parse error: syntax error, unexpected ‘new’ (T_NEW) in D:\XOOPS X\html\modules\pm\preload\Preload.class.php on line 10

pmというモジュールは使っていないようなので削除してみる.同じエラーがdbtheme,cubeUtils,bulletinでも出る.⇒これらをすべて削除して例の「このサイトはただいまメンテナンス中です」の画面に出た.ログインして下記になった.

Fatal error: require(): Failed opening required ‘D:/XOOPS X/xoops_trust_path/modules/protector/xoops_version.php’ (include_path=’C:\xampp\php\PEAR’) in D:\XOOPS X\html\modules\protector.BAD\xoops_version.php on line 11
Deprecated [PHP]: Array and string offset access syntax with curly braces is deprecated in file D:\XOOPS X\xoops_trust_path\modules\pico\preload.php line 40 (2)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; LegacyNon_installation_moduleHandler has a deprecated constructor in file D:\XOOPS X\html\modules\legacy\class\non_installation_module.php line 20 (1)
Warning [PHP]: require(D:/XOOPS X/xoops_trust_path/modules/protector/xoops_version.php): failed to open stream: No such file or directory in file D:\XOOPS X\html\modules\protector.BAD\xoops_version.php line 11 (1)

protector.BADを強引に読み出そうとしているように思われる.protectorに関するフォルダを全部パージしてみた.

image

上のリストの下位5本のモジュールはすべてパージした.これで例の3本を挙げた「以下のモジュールが導入されていません」になる.しかし,エラーが発生してこれ以上前に進めない状態だ.⇒XOOPS Xのテーブルから補充することができるのではないか?モジュールはzelkova_modulesに登録されている.profileに関してはzelkova_profile_dataとzelkova_profile_definitionsが定義されている.xupdateに関してはzelkova_xupdate_modulestore,zelkova_xupdate_storeが使われている.zelkova_xupdate_modulestoreの中には導入可能なモジュールがあらかじめ登録されている.これも有難迷惑という感じだ…zelkova_modulesを比較してみよう.

(2, ‘互換モジュール’, 203, 1583430004, 1, 1, ‘legacy’, ”, ”, 0, 1, 0, 0, 0, 0),
(3, ‘互換レンダーシステム’, 203, 1583413196, 1, 1, ‘legacyRender’, ”, ”, 0, 1, 0, 1, 0, 0),
(4, ‘ユーザーモジュール’, 203, 1583413196, 1, 1, ‘user’, ”, ”, 0, 1, 0, 1, 0, 0),
(5, ‘プロフィール’, 203, 1583413196, 1, 1, ‘profile’, ”, ”, 0, 1, 0, 0, 0, 0),
(6, ‘標準キャッシュモジュール’, 203, 1583413196, 1, 1, ‘stdCache’, ”, ”, 0, 1, 0, 0, 0, 0),
(7, ‘ALTSYS’, 82, 1583430241, 0, 1, ‘altsys’, ‘altsys’, ”, 1, 1, 0, 1, 0, 0),
(8, ‘導入・アップデート管理’, 74, 1583430251, 0, 1, ‘xupdate’, ‘xupdate’, ”, 0, 1, 0, 1, 0, 0),
(9, ‘プライベートメッセージ’, 119, 1583430346, 1, 1, ‘message’, ”, ”, 1, 1, 0, 1, 0, 0),
(10, ‘Protector’, 352, 1583430363, 1, 1, ‘protector’, ”, ”, 0, 1, 0, 1, 0, 0);

(2, ‘互換モジュール’, 107, 1268069849, 0, 1, ‘legacy’, 0, 1, 0, 0, 0, 0),
(3, ‘ユーザーモジュール’, 107, 1269039826, 0, 1, ‘user’, 0, 1, 0, 1, 0, 0),
(4, ‘互換レンダーシステム’, 107, 1268069884, 0, 1, ‘legacyRender’, 0, 1, 0, 1, 0, 0),
(5, ‘標準キャッシュモジュール’, 107, 1267998733, 0, 1, ‘stdCache’, 0, 1, 0, 0, 0, 0),
(6, ‘ALTSYS’, 71, 1266935228, 0, 1, ‘altsys’, 1, 1, 0, 1, 0, 0),
(7, ‘プライベートメッセージ’, 107, 1267998733, 0, 1, ‘pm’, 0, 1, 0, 1, 0, 0),
(8, ‘Protector’, 340, 1267998733, 0, 1, ‘protector’, 0, 1, 0, 1, 0, 0),
(9, ‘系図ファイルアーカイブ’, 147, 1269247926, 70, 1, ‘Archive’, 1, 1, 1, 1, 0, 1),
(10, ‘ゼルコバの木ダウンロード’, 147, 1269242625, 65, 1, ‘DownLoad’, 1, 1, 1, 1, 0, 1),
(12, ‘ユーザ会ニュース’, 221, 1267435553, 20, 1, ‘bulletin’, 1, 1, 1, 1, 1, 1),
(33, ‘屋根裏部屋’, 235, 1290055477, 100, 1, ‘xpress’, 1, 1, 1, 1, 0, 1),
(19, ‘ユーザ会フォーラム’, 85, 1268860980, 40, 1, ‘d3forum’, 1, 1, 1, 1, 0, 1),
(67, ‘cubeUtils’, 70, 1269047284, 1, 1, ‘cubeUtils’, 0, 1, 0, 1, 0, 0),
(21, ‘テーマ編集’, 50, 1266935237, 0, 1, ‘dbtheme’, 1, 1, 0, 1, 0, 0),
(35, ‘ゼルコバの木の育て方’, 182, 1269206480, 55, 1, ‘pico2’, 1, 1, 1, 1, 0, 1),
(61, ‘バグレポート’, 100, 1270463407, 60, 1, ‘mantis’, 1, 1, 1, 1, 0, 0),
(64, ‘Happy Linux Framework’, 150, 1268168955, 0, 1, ‘happy_linux’, 0, 1, 0, 0, 0, 0),
(66, ‘ゼルコバの木の使い方’, 182, 1269904140, 30, 1, ‘pico1’, 1, 1, 1, 1, 0, 1),
(65, ‘Webリンク集’, 194, 1267805806, 80, 1, ‘weblinks’, 1, 1, 1, 1, 1, 1),
(72, ‘ニュースデスク’, 210, 1273160246, 100, 1, ‘evennews’, 1, 1, 0, 1, 0, 0),
(73, ‘Tell a Friend’, 105, 1268687838, 0, 0, ‘tellafriend’, 1, 1, 0, 1, 0, 0),
(78, ‘メールアドレス変更’, 110, 1289992201, 0, 1, ‘changemail’, 1, 1, 0, 0, 0, 0),
(79, ‘ユーザー名変更’, 100, 1289992201, 0, 1, ‘resetuname’, 1, 1, 0, 1, 0, 0),
(77, ‘なんでも質問箱’, 108, 1269386038, 25, 1, ‘smartfaq’, 1, 1, 1, 1, 1, 1),
(80, ‘登録メール再送信’, 100, 1289992201, 0, 1, ‘resendmail’, 1, 0, 0, 0, 0, 0);

問題は両者で共通なモジュールのmidが異なるないしかち合うという点だ.ともかく新しい版の構成を優先してリストを作り直してみよう.Archiveの9とDownLoadの10をそれぞれ11, 13に変えてみる.存在しないモジュールの欄はカットしてもよいが,このまま残して.zelkova_profile_data,zelkova_profile_definitions,zelkova_xupdate_modulestore,zelkova_xupdate_storeを追加してみる.以下のエラーが出た.

#1136 – 1 行目で、列の数が値の数と一致しません。

zelkova_modulesのテーブル構成が変化しているのだろうか?確かに大分変わっている.

CREATE TABLE IF NOT EXISTS `zelkova_modules` (
  `mid` smallint(5) unsigned NOT NULL auto_increment,
  `name` varchar(150) NOT NULL default ”,
  `version` smallint(5) unsigned NOT NULL default ‘100’,
  `last_update` int(10) unsigned NOT NULL default ‘0’,
  `weight` smallint(3) unsigned NOT NULL default ‘0’,
  `isactive` tinyint(1) unsigned NOT NULL default ‘0’,
  `dirname` varchar(25) NOT NULL default ”,
  `hasmain` tinyint(1) unsigned NOT NULL default ‘0’,
  `hasadmin` tinyint(1) unsigned NOT NULL default ‘0’,
  `hassearch` tinyint(1) unsigned NOT NULL default ‘0’,
  `hasconfig` tinyint(1) unsigned NOT NULL default ‘0’,
  `hascomments` tinyint(1) unsigned NOT NULL default ‘0’,
  `hasnotification` tinyint(1) unsigned NOT NULL default ‘0’,
  PRIMARY KEY  (`mid`),
  KEY `hasmain` (`hasmain`),
  KEY `hasadmin` (`hasadmin`),
  KEY `hassearch` (`hassearch`),
  KEY `hasnotification` (`hasnotification`),
  KEY `dirname` (`dirname`),
  KEY `name` (`name`(15))
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=81 ;

CREATE TABLE `zelkova_modules` (
  `mid` smallint(5) UNSIGNED NOT NULL,
  `name` varchar(150) NOT NULL DEFAULT ”,
  `version` smallint(5) UNSIGNED NOT NULL DEFAULT 100,
  `last_update` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `weight` smallint(3) UNSIGNED NOT NULL DEFAULT 0,
  `isactive` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `dirname` varchar(25) NOT NULL DEFAULT ”,
  `trust_dirname` varchar(25) NOT NULL DEFAULT ”,
  `role` varchar(15) NOT NULL DEFAULT ”,
  `hasmain` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `hasadmin` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `hassearch` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `hasconfig` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `hascomments` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  `hasnotification` tinyint(1) UNSIGNED NOT NULL DEFAULT 0
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

trust_dirnameというのは新版にはない.roleという列もない.PRIMARY KEYといくつかのKEYが新たに定義されている.いや,間違えた.下の方が新しい定義だ.つまり,trust_dirnameとroleが追加され,KEY定義がすべて抹消されている.MyISAM DEFAULT CHARSETもutf8からutf8mb4に変化している.KEYという用語はどこにも使われていない.AUTO_INCREMENT=81は残しておこう.修正を入れたのにまったく同じエラーになった.⇒INSERT INTO `zelkova_modulesの一行目を書き換えていなかった.

静的解析で大量のエラーが発生した.

解析中に 270 個のエラーが見つかりました。

  • ステートメントの開始があるべきです。 (near “11” at position 1)
  • ステートメントの開始があるべきです。 (near “‘系図ファイルアーカイブ'” at position 5)
  • ステートメントの開始があるべきです。 (near “147” at position 20)
  • ステートメントの開始があるべきです。 (near “1269247926” at position 25)
  •  

    追加するところに’,’を入れ忘れていた.⇒一応通った.以下のエラーは前から出ている.

    #1044 – ユーザー ‘root’@’localhost’ の ‘information_schema’ データベースへのアクセスを拒否します

    どうもまだまだエラーが続きそうだ.

    Module File for cubeUtils Not Found!Module File for bulletin Not Found!Module File for mantis Not Found!Module File for mantis Not Found!
    Fatal error: Uncaught Error: Call to undefined function ereg() in D:\XOOPS X\xoops_trust_path\templates_c\localhost-default-astro2^%%FD^FD5^FD50D30C%%theme.html.php:5 Stack trace: #0 D:\XOOPS X\xoops_trust_path\libs\smarty\Smarty.class.php(1278): include() #1 D:\XOOPS X\html\modules\legacyRender\kernel\Legacy_RenderSystem.class.php(444): Smarty->fetch(‘astro2/theme.ht…’) #2 D:\XOOPS X\html\modules\legacyRender\kernel\Legacy_RenderSystem.class.php(331): Legacy_RenderSystem->renderTheme(Object(Legacy_ThemeRenderTarget)) #3 D:\XOOPS X\html\modules\legacy\kernel\Legacy_Controller.class.php(951): Legacy_RenderSystem->render(Object(Legacy_ThemeRenderTarget)) #4 D:\XOOPS X\html\modules\legacy\kernel\Legacy_Controller.class.php(920): Legacy_Controller->_executeViewTheme(NULL) #5 D:\XOOPS X\html\footer.php(36): Legacy_Controller->executeView() #6 D:\XOOPS X\html\index.php(16): require_once(‘D:\\XOOPS X\\html…’) #7 {main} thrown in D:\XOOPS X\xoops_trust_path\templates_c\localhost-default-astro2^%%FD^FD5^FD50D30C%%theme.html.php on line 5

    cubeUtils,bulletin,mantisの行をパージしてみる.⇒最初の一行目は消えたが,その後は同じ.astro2というのは前に使っていたテーマだ.何か欠けているものがあるのだろうか?これは描画に関係するものだ.確かに自家サーバ\XOOPS\templates_cにはいろいろなファイルが入っている.templates_cはmodulesと同じ階層にあるフォルダだが,新版にはこのようなものはない.とりあえずコピーしてみよう.xoops_trust_pathにはある.上書きしてみよう.まったく変化しない.D:\XOOPS X\xoops_trust_path\templates_c\localhost-default-astro2^%%FD^FD5^FD50D30C%%theme.html.phpというファイルで参照しているeregという関数が存在しないということのようだ.この関数はPHPに含まれているはずだが,PHP4ないし5でしか使われない.PHP 5.3.0で非推奨となり,PHP7では削除されている.⇒この部分をコメントアウトしてとりあえず動いた.確かにこの画面だ.

    image

    どの程度動くものか試してみよう.トップページの記事には「重要:バグレポートに登録するためにはログインが必要になりました」というタイトルが付いている.これはmantisがDDOS攻撃を受けて閉鎖に至った経緯を述べているものだ.日付は分からないが,この時期以降はサイトの更新頻度もかなり落ちているはずだから,ある程度使い物になる可能性はある.picoを落としてしまったので「ゼルコバの木の使い方」は開けない.「プライベートメッセージ」も動作していない.というか,サイドバーに表示されたメニューは全滅だ.結局カバーページ1ページが開けたに過ぎないという状態だ.最初の画面のメニューには屋根裏部屋は出てこなかったが,ページ切り替え時にログイン画面が出てログインし直したらもっと新しいメニューが出てきた.これは最終的なメニューに近いものと思われる.屋根裏部屋も含まれているが,以下のようなエラーが出るため表示できない.

    お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。Deprecated [PHP]: Array and string offset access syntax with curly braces is deprecated in file D:\XOOPS X\xoops_trust_path\modules\pico\preload.php line 40 (2)

    「ニュースデスク」だけは開けるが,あまり見易いものではない.ゼルコバ通信No.9~11が表示されるが,一部重複がある.

    image

    これを公開できるところまで持ってゆくというのは至難の業に近い…PHPでエラーが出ているのはXOOPSとxamppで使っているPHPのバージョンが違うためと考えられるが,ネットで調べると「XOOPSはPHP7で動作する」という.

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

    現在公開されてる最新版のXOOPS X(ten)はPHP7でうごきますので特別何かする必要はありません。 しかしホダ塾ディストリビューションや XOOPS 2.0.xJPはPHP7で動かないのでアップグレードが必要です。 現在稼働中のXOOPサイトをPHP7で動かすには?現在稼働中のXOOPSがXOOPS X(ten)であれば、そのままPHP7で動く可能性が高いです。 ただし利用しているモジュールやバージョンによってはPHP7に対応してないこともあるので、本番環境をいきなりPHP7にバージョンアップするのはやめましょう。 まずはPHP7のテスト環境を用意して、その環境で動作確認してから本番環境をPHP7にしましょう。

    ということのようだ.ロードしたバージョンはXOOPS Xのはずだから,XOOPS本体はPHP7に対応していると考えられる.モジュールを差し替えてゆけば動作するようになるだろうか?xpress(WordPress)の場合,http://www.knts.net/Xlc/modules/pico/index.php?content_id=3 によれば,

    Xoopsに付属のモジュール(アドオンストア>ストア一覧:xpress)、以下の環境ではインストールしてもPHP7では正しく動作しない。
    PHP Version::7.0.15
    MySQL Version::5.7.17
    XOOPS Version::XOOPS Cube Legacy 2.2.3 Beta 1

    とされる.ただし,http://ja.xpressme.info/ からXPressME Version::2.54をダウンロードしてWordPressに組み込むという奥の手があるという.まず,ともかくアドオンストアから最新版のxpresをダウンロードしてみよう.管理画面→互換モジュールでxpressを2.48にアップデートできた.このxpressはXPressMEそのものであるということなので動作してもよいはずなのだが,動作は変化しない.「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」という問題に対処する必要がある.

    PHP7ではMySQL拡張は廃止されているので,以下のいずれかの方法で対処する必要がある.①mysqli, ②PDO_MySQL.MySQL側ではmysqliを使うようになっているはずだから,WordPress側で変える必要があるが,XPressMEはすでにインストールされているのだから,暗礁に乗り上げてしまう. mysqli拡張モジュールというのはあるようだ.xamppのパッケージにはこれが含まれていないということだろうか?現在インストールされているのはxampp-windows-x64-7.4.2-0-VC15-installerで最新版は7.4.3だからそれほど古いものではない.これにはMariaDBというのが入っているが,これがmysqli 拡張を含んでいないということなのだろうか?以下に対処法がある.

    「mysqli 拡張がありません。PHPの設定をチェックしてみてください」 エラーの対処方法
    https://www.projectgroup.info/tips/php/comm_0003.html

    PHP.iniで①extension=php_mysqli.dllと②extension_dir="ext"を設定する.この修正を入れても問題は解決しない.

    〈WordPress・PHP7エラー〉「お使いのサーバーのPHPではWordPressに必要なMySQL拡張を利用できないようです。」の対処法
    https://money-affairs.com/error-extension-mysqli/

    この記事では,①php.iniでextension=mysqliを設定する,②Apache/httpd.confの229~232行目,279~281行目,「 index.php」を追加などの修正を行う となっている.

    この修正はバックアップを取ってからやることにしよう.

    コメントを残す

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

    CAPTCHA