XOOPS X の2008年最新版ホダ塾ディストリビューションというのを XOOPS Cube サイトからダウンロードしてインストールした.この版を動かすためにはxamppの最新版を使う必要があるので切り替えたが,MySQLが起動できない状態になっている.この版はこれまでにも何度も動かしているので動かないはずはないのだが…rootユーザのパスワードの問題かもしれない.Reset the MySQL/MariaDB Root Password という手順があるのでやってみよう.これはxamppのコントロールパネルのShellから実行するコマンドだ.⇒いや,ダメだ.この操作を行うためにはそもそもMySQLが走っている必要がある.xampp/mysql/bin/my.ini で管理者パスワードなしに修正したが動作は変わらない.
mysql_install_db.exe というのがあったのでやってみよう.このデータベースには確かWordPress(テント村)のデータが入っているはずなので,一応 data のバックアップを取っておくことにする.ダメだ.どうもどこかで何かが壊れてしまっているような気がする.いや,mysql_install_db を実行する前に data を空にするかないし削除する必要があるようだ.⇒これで走ったようだ.MySQL はパスワードなしで走っている.データベースは完全に空になっている.これでXOOPS X をインストールすればともかく管理人としてログインできるようになるだろう.このディストリビューションは XOOPS Cube 2.2 となっている.既存のXOOPSデータベースと同じデータベース名・ユーザ名・パスワードで登録した.今回は zelkova_usersテーブル もきれいに生成できた.後は管理者を登録するだけだ.
インストールの第一ステップは完了した.ダメだ!エラーが発生してしまった.
Warning: Cannot modify header information – headers already sent by (output started at D:\XOOPSX\html\core\XCube_Service.class.php:121) in D:\XOOPSX\html\install\wizards\install_nextStep.inc.php on line 11
このエラーの報告はネット上にもあるが,見たところ効果的な対策は見当たらない.次のリリースを待てのような感じ?しかし,これがファイナルなのだからここで動かすしかない.ログイン画面は出せるようなのでやってみよう.Fatal Errorが出たが,戻りボタンで画面を戻るとXOOPS Cube Site のフラッシュ画面になった.もしかすると動かせるかもしれない.
ログインしていないつもりだが,アカウント情報→管理者メニューで管理画面に出た.
原理的にはこの画面に出られればXOOPSでできることはすべてできることになる.「アップデート可能なモジュールが3個あります」という通知が出ている.モジュールは7個インストールされている.モジュールのアップデートは現在も実施されているようだ.legacyというモジュールの最新更新日は2020/3/5 13:59:56となっている.さて,ともかくこの状態で一旦バックアップを取っておこう.phpMyAdmin でまだエラーが出ている.
mysqli::real_connect(): (HY000/1045): Access denied for user ‘pma’@’localhost’ (using password: NO)
設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました。
phpMyAdmin の controluser として pma というデフォルトユーザがconfig.inc.phpで設定されている.このパスワードが空になっているためではないだろうか?⇒そのようだ.パスワードを設定してエラーは消えた.いや,消えていない.以下にこの問題の対処策がある.
yo need create the user “pma” in mysql or change this lines(user and password for mysql):
/* User for advanced features */ $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = '';
pma というユーザを新たに作るか,ないし config.inc.php を修正しろということらしい.
Add this line to the file xampp\phpMyAdmin\config.inc:
$cfg['Servers'][$i]['port'] = '3307';
以下の行も書き換えておいた.
$cfg[‘Lang’] = ‘ja_utf8’;
いや,却って悪くなった.この行「$cfg[‘Servers’][$i][‘port’] = ‘3307’;」を入れると接続できなくなってしまう.また,「$cfg[‘Lang’] = ‘ja_utf8’;」行では「サポートされていない言語のコードを無視します。」のようなエラーになる.⇒戻しておこう.’controluser’をrootにするというのは効いたようだ.ともかく,ここまでのところをバックアップしておこう.phpMyAdminでまだエラーが出ている.
Deprecation Notice in .\libraries\classes\Export.php#592
implode(): Passing glue string after array is deprecated. Swap the parameters
Backtrace
.\libraries\classes\Export.php#592: implode(
array,
string ‘|’,
)
.\export.php#470: PhpMyAdmin\Export->exportServer(
array,
string ‘structure_and_data’,
,
string ‘ ‘,
string ‘server_export.php’,
string ‘server’,
boolean false,
boolean true,
boolean false,
boolean false,
array,
string ”,
)
deprecation というのは,すでに廃止されたという意味だ.どうもこうなるといよいよPHPの開発環境まで必要になってくるのではないか?ともかくここでは無視しておくしかない.何が起きるかわからないが,ともかく一度テーブルをドロップしてバックアップデータと差し替えてみよう.以下のようなメッセージがMySQLから出ている.
#1044 – ユーザー ‘root’@’localhost’ の ‘information_schema’ データベースへのアクセスを拒否します
さて,これで動くかどうか,XOOPS X にもう一度アクセス⇒この画面に戻ってきた.
これで管理人としてログインできるかどうかが勝負だ.ダメだ!パスワードが通っていない.しかし,別のパスワードでログインできた.修正するカラムを間違えていた.いや,そもそも修正が入っていないような気がする…まぁともかく,以下の画面が出たので進んでみよう.
ダメだ.Fatal errorになってしまった.
Fatal error: Uncaught Error: Call to undefined method Legacy_ModuleInstaller::Legacy_ModuleInstaller() in D:\XOOPSX\html\modules\message\admin\class\myInstaller.class.php:16 Stack trace: #0 D:\XOOPSX\html\modules\legacy\admin\class\ModuleInstallUtils.class.php(136): Message_myInstaller->Message_myInstaller() #1 D:\XOOPSX\html\modules\legacy\admin\class\ModuleInstallUtils.class.php(79): Legacy_ModuleInstallUtils::_createInstaller(‘message’, ‘installer’, ‘Legacy_ModuleIn…’) #2 D:\XOOPSX\html\modules\legacy\preload\Primary\SystemModuleInstall.class.php(108): Legacy_ModuleInstallUtils::createInstaller(‘message’) #3 D:\XOOPSX\html\core\XCube_Delegate.class.php(349): Legacy_SystemModuleInstall->callbackSetupUser(Object(Legacy_GenericPrincipal), Object(Legacy_Controller), Object(Legacy_HttpContext)) #4 D:\XOOPSX\html\core\XCube_Controller.class.php(352): XCube_Delegate->call(Object(XCube_Ref), Object(XCube_Ref), Object(XCube_Ref)) #5 D:\XOOPSX\html\modules\legacy\kernel\Legacy_Controller.class.php(579): XCube_Controller->_setu in D:\XOOPSX\html\modules\message\admin\class\myInstaller.class.php on line 16
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; EasyLex_SQLToken has a deprecated constructor in file D:\XOOPSX\html\modules\legacy\lib\EasyLex\EasyLex_SQLScanner.class.php line 22 (1)
Deprecated [PHP]: Array and string offset access syntax with curly braces is deprecated in file D:\XOOPSX\html\modules\legacy\lib\EasyLex\EasyLex_SQLScanner.class.php line 81 (1)
Deprecated [PHP]: Function get_magic_quotes_gpc() is deprecated in file D:\XOOPSX\html\class\module.textsanitizer.php line 238 (24)
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:\XOOPSX\html\modules\legacy\class\non_installation_module.php line 20 (1)
Deprecated [PHP]: Methods with the same name as their class will not be constructors in a future version of PHP; Message_myInstaller has a deprecated constructor in file D:\XOOPSX\html\modules\message\admin\class\myInstaller.class.php line 12 (1)
Fatal [PHP]: Uncaught Error: Call to undefined method Legacy_ModuleInstaller::Legacy_ModuleInstaller() in D:\XOOPSX\html\modules\message\admin\class\myInstaller.class.php:16 Stack trace: #0 D:\XOOPSX\html\modules\legacy\admin\class\ModuleInstallUtils.class.php(136): Message_myInstaller->Message_myInstaller() #1 D:\XOOPSX\html\modules\legacy\admin\class\ModuleInstallUtils.class.php(79): Legacy_ModuleInstallUtils::_createInstaller(‘message’, ‘installer’, ‘Legacy_ModuleIn…’) #2 D:\XOOPSX\html\modules\legacy\preload\Primary\SystemModuleInstall.class.php(108): Legacy_ModuleInstallUtils::createInstaller(‘message’) #3 D:\XOOPSX\html\core\XCube_Delegate.class.php(349): Legacy_SystemModuleInstall->callbackSetupUser(Object(Legacy_GenericPrincipal), Object(Legacy_Controller), Object(Legacy_HttpContext)) #4 D:\XOOPSX\html\core\XCube_Controller.class.php(352): XCube_Delegate->call(Object(XCube_Ref), Object(XCube_Ref), Object(XCube_Ref)) #5 D:\XOOPSX\html\modules\legacy\kernel\Legacy_Controller.class.php(579): XCube_Controller->_setu in file D:\XOOPSX\html\modules\message\admin\class\myInstaller.class.php line 16 (1)
パスワードが通らなかったのは修正箇所を間違えていたからだ.もう一度インポートし直して管理人パスワードは通ったが,「以下のモジュールがインストールされていません」以下の動作は同じだ.「このサイトはただいまメンテナンス中です」が出るのはどこかでフラグが立っているためと思われる.それを外して何とかログインできるようにしなくてはならない.このXOOPS用のデータベースにはテーブルが150個入っている.これらのどこかにそのスイッチがあるはずだ.テーブル名から推定されるモジュールを列挙してみよう.
- altsys
- archive
- avatar
- banner
- block
- bulletin
- config
- d3forum
- download
- evennews
- groups
- image
- mailchange
- mantis
- pico1
- pico2
- profile
- protector
- smartfaq
- smiles
- tellafriend
- tpl
- users
- weblinks
- xpress
- xupdate
config というテーブルに debug_mode というのがある.確かにこの値を1→0とすると「このサイトはただいまメンテナンス中です」画面をパスできるが,結局「以下のモジュールが導入されていません」の画面に出てしまう.profile, xupdate, message がインストールされなくてはならないというのだが,エラーの嵐になってしまうので手が出せない.現状のデータベースをバックアップ→ドロップして元の状態に戻してみよう.⇒うまく行った.
インストールできるモジュールは,①Messageと②Protectorだけで,profile, X-Update はすでにインストール済だ.Message は推奨なのでとりあえず無視できるが,必須モジュールはすでに導入された状態になっている.moduleというテーブルはあるのでそれを加工することで対応は可能かもしれないが,それで済むだろうか?XOOPS Xに入っているのは以下の7つのモジュールだけだ.
- legacy
- legacyRender
- user
- profile
- stdCache
- altsys
- xupdate
どうもこのXOOPS Xというのもそれ自体かなり難物だ.既存モジュールのアップデートを実行しただけでログインできなくなってしまった.
http://localhost/user.php?xoops_redirect=%2Fuser.php
いくら何でもこれは酷すぎる.ログインしようとするとuser.phpからuser.phpにリダイレクトしようとするので無限ループしている.ちょっと使い物にならないと思うが,バックアップは一応取ってあるのでもう一度そこまで戻ってやり直してみることにする.⇒パスワードを書き直してログインはできた.前回はアップデート可能なモジュールが3個となっていたのが,1個になった.前回は(アップデート時には)配置・上書きをしないファイルまたはディレクトリ(前方一致)。のチェックをすべて入れてから取得して配置を実行したが,今回はチェックを入れないようにしてみる.XoopsX_CorePackというのをインストールしようとしている.
legacyのアップデートは完了した.なお,altsysとxupdateの更新が残っている.⇒やはりかなり具合が悪い.画面上部の「アップデート可能なモジュールがあります」をクリックして「このページは動作していません」になってしまう.この「アップデート可能なモジュールがあります」というボタン自体が「おかしい」のだろう.モジュールの管理画面で個別にアップデートすれば問題なく完了する.MessageとProtectorもインストールしておこう.
バックアップデータをリストアしてデータベースを整合的に補充するというのはかなり難しいのではないかと思う.実際,モジュールのアップデートだけでもシステムが壊れてしまうくらいなのだから,やはり動いている状態を維持しながら少しづつオペレーションするしかない.この意味では XOOPS X をベースにその上に追加的に古いデータを注ぎ込んでゆくしかないのではないかと思う.とりあえず usersテーブルだけを導入してみよう.
「#1068 – PRIMARY KEY が複数定義されています。」というエラーが出たが一応完了した.admin のパスワードが通らなくなってしまったのでテーブルトップのbabalaboにパスワードを設定して潜入に成功した.
ユーザーの合計: 683
承認済ユーザ: 672 | 未承認ユーザ: 11
すべてのユーザの名前とメールアドレスが見えるようになった.ダメだ.テーブルの3ページ目辺りでエラーが起きて回復できなくなった.⇒またログインできなくなってしまった.再起動して動くようになったが,ユーザ登録テーブルでページ移動するところでエラーになる.
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:\XOOPSX\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:\XOOPSX\xoops_trust_path\modules\protector\class\ProtectorFilter.php line 35 (1)
うまくジャンプできる場合もある.最後の35ページ目は開けた.protectorを一時的に止めることはできるだろうか?⇒モジュールを廃棄するという手段がないのでフォルダのリネームなどの強引な手段で止めた.これで一応動作するようになった.protectorはインストールしたばかりの最新版のはずなのにどうしようもない…管理画面の左上にある「導入・アップデート管理」ボタンを押しただけで,やはり下記の状態になる.
一応ある程度までは無害動作するようになったが,さて,このあとどう展開すればよいか?それが問題だ.