XOOPS最新版にモジュールインストールを試みて失敗

本家XOOPSから最新版をダウンロードしてインストールした.完璧に動作している.今までの苦労はなんだったのか?という感じだ.XOOPS Cube つまり,日本語XOOPSはほぼ完全に終わってしまっている.あるいは,もしかしたら潰されたのかもしれない…ともかくXOOPSはまだ根強く活きているからユーザ会サイト復活のチャンスは十分あると考えてよい.

さて,今後の進め方を考えてみよう.できれば古いxamppとXOOPSの組み合わせを並行して実行できるようにしておきたい.xamppではポート80と3306を使っているので,この部分だけを切り替えれば2つのアパッチを同時に走らせることは可能なのではないか?localhostでアクセスするようになっているがこれも単なる文字列のはずだから,何か別の名前を与えることはできるはずだ.XoopsCore25 の画面はXOOPS Cubeとはかなり違う上に英語版ときているので慣れるまでにはかなり掛かりそうだが,機能的にはそれほど大きな違いはないはずだから,2つを対照・比較することができれば使い方を習熟する上でも有効だ.

難関はXoopsCore25の上にユーザ会サイトバックアップのデータベースイメージをインポートする部分だが,前に古いバージョンで成功しているのでその手順を参考にすれば何とかなるのではないかと思う.今後ということもあるので,できるだけ簡便な操作でモジュールとデータベースの相互関係を再構築する手順を確立したい.モジュールの導入とデータベースデータの流し込みのどちらを先に実行すべきか?というのが問題だ.

前回はパッケージの中にモジュールがすでに入っていてXOOPSを立ち上げたときにはそれらはすでにインストール済の状態になっていたのではないだろうか?この辺りの詳細手順は一度ログを読み直して再確認した方がよい.ともかく,まず始業時バックアップから開始することにしよう.xampp7とXoopsCore25をバックアップした.MySQLも取っておこう.このSQLはXoopsCore25のフォルダに入れておく.⇒ダメだ.エクスポートに失敗している.

<br />
<b>Fatal error</b>:  Uncaught TypeError: mb_detect_encoding() expects parameter 1 to be string, bool given in C:\xampp7\phpMyAdmin\libraries\classes\Util.php:1620
Stack trace:
#0 C:\xampp7\phpMyAdmin\libraries\classes\Util.php(1620): mb_detect_encoding(false, ‘UTF-8’, true)
#1 C:\xampp7\phpMyAdmin\libraries\classes\Plugins\Export\ExportSql.php(725): PhpMyAdmin\Util::localisedDate()
#2 C:\xampp7\phpMyAdmin\export.php(444): PhpMyAdmin\Plugins\Export\ExportSql-&gt;exportHeader()
#3 {main}
  thrown in <b>C:\xampp7\phpMyAdmin\libraries\classes\Util.php</b> on line <b>1620</b><br />

このエラーも前に見たことがある.全選択しているが,選択肢は①mysql, ②test,③oa00090878_babalaboしかない.oa00090878_babalaboだけをエキスポートするようにしてみたが結果は同じだ.これはかなりまずいと思う.これまでエキスポートで失敗したという経験はない.障害はlocalisedDataの中で発生している.以下のリンクに回答がある.

https://crieit.net/posts/phpMyAdmin5-0-1-Fatal-Error

とりあえず日本語ユーザーができる仮対応としては、

C:\xampp\phpMyAdmin\libraries\classes\Util.phpの1617行目を「$ret = strftime(‘%Y-%B-%d %H:%M’, (int) $timestamp);」に書き換える。

だけだ.この修正は前にも一度やったことがある.というか,その修正は残っているが,上の説明は間違っている.それよりも上に書かれている「strftime()ではなくdate()に書き換えるべきである」というのが正しいように思われるので,以下のように暫定修正した.

// $ret = strftime($date, (int) $timestamp);
$ret = date(‘Y-m-d H:i:s’, (int) $timestamp);

これで問題なくエキスポートできるようになった.現状でもxamppとXOOOPSは単純に起動すれば動作するようになっている.ただし,xampp7を並列実行すると下記のエラーになる.

20:15:43  [Apache]     Problem detected!
20:15:43  [Apache]     Port 80 in use by “C:\xampp\apache\bin\apache.exe” with PID 17032!
20:15:43  [Apache]     Apache WILL NOT start without the configured ports free!
20:15:43  [Apache]     You need to uninstall/disable/reconfigure the blocking application
20:15:43  [Apache]     or reconfigure Apache and the Control Panel to listen on a different port
20:15:43  [Apache]     Problem detected!
20:15:43  [Apache]     Port 443 in use by “C:\xampp\apache\bin\apache.exe” with PID 17032!
20:15:43  [Apache]     Apache WILL NOT start without the configured ports free!
20:15:43  [Apache]     You need to uninstall/disable/reconfigure the blocking application
20:15:43  [Apache]     or reconfigure Apache and the Control Panel to listen on a different port
20:15:43  [mysql]     Problem detected!
20:15:43  [mysql]     Port 3306 in use by “C:\xampp\mysql\bin\mysqld.exe”!
20:15:43  [mysql]     MySQL WILL NOT start without the configured ports free!
20:15:43  [mysql]     You need to uninstall/disable/reconfigure the blocking application
20:15:43  [mysql]     or reconfigure MySQL and the Control Panel to listen on a different port

Port 80, 443, 3306がすでに使われているというエラーだ.どう回避すればよいのか?xampp7には構成を変更するためのツールが付いているのでこちらで対応することにする.それぞれ80→81,443→444,3306→3307に変更しておいた.localhostではXOOPSが開く.localhostはApacheだけではなく,MySQLやXOOPSの内部でも使われている.ただし,MySQLのlocalhostというのは少し意味が違うような気がする.つまり,MySQL自体をlocalhostと呼んでいるように思われる.いや,localhost:81で呼び分けることができるかもしれない.いや,そういう構文は通らない.

httpd.confでServerName localhost:80→ServerName localhost:81と変えて見たが,xampp7のコントロールパネルのApache→Admin,MySQL→Adminのボタンでどちらもlocalhost:81にアクセスしようとしてこのサイトに「アクセスできません」となる.

1つのPC(サーバー)で複数のApacheをインストールして利用する方法
http://algorhythnn.jp/blg/2013/10/29/multi-apache-one-pc/

によると,「NICに対して複数のIPアドレスを割り当てて,IPアドレスでアクセスする」ということのようだ.このためにはIPアドレスを固定しなくてはならない.IPアドレスが決まれば,hostsでその値を設定して名前で呼び出すこともできる.ポートで呼び分けることができるのならその方が早いのではないか?xampp7の方はポート番号を切り替えただけで動作するようになった.httpd.confで以下の修正を行った.

  • ServerName localhost:81
  • Listen 81

しかし,今度はxamppのApacheが起動できなくなった.xamppを先に起動すると今度はxampp7のApacheが走らなくなる.さっきはうまく行ったのだが…⇒上記のような記事もあるので不可能ではないと思われるが,結構難しそうなところもあるのでこの件は後回しということにしよう.必要ならば個別に起動することはできるし,場合によっては別のマシンに移植して独立の環境を与えることもできるだろう.

完全に復旧したつもりだが,phpMyAdminが起動できない.⇒localhost/phpMyAdminではxampp7/htdocs/phpMyAdminを参照している.しかし,上の修正を行った時点ではxampp7/phpMyAdminを見ていたはずなのだが…いや,どうもその両方が参照されているようだ.アドレスはどちらもlocalhost/phpmyadminとなっているが,コントロールパネルから起動するときはxampp7/phpMyAdminを見ているように思われる.つまり,どちらも必要ということになる.どちらかにリダイレクトすればよいのかもしれないが…

xamppのコントロールパネルでAdminをクリックするとWinMySQLadminが立ち上がってくるが,むしろphpMyAdminが開いた方がありがたいので変えておこう.⇒PHPを修正する必要がある.WinMySQLadminはEXEとしてインストールされている…⇒見送り.

さて,いよいよXoopsCore25へのデータ移植だが,どうやって進めればよいだろう?せめて,比較のためにphpMyAdminで2つのデータベースを開いて比較できるようにできればよいのだが…テーブルに別の名前を付けて読み込んでおくという手があるのではないか?既存DBには150個もテーブルが入っている.新規DBには34個しかない.これを完全にすり合わせるのはかなり困難と思われるが,やるしかない.xoopsの構成はmainfile.phpで決定されるので,これを切り替えながら2つのDBを開けるようにするということが考えられる.まず,そういう仕組を作ってみることにしよう.既存DBテーブルをxoopsの名前で読み込んでみる.

このSQLはバックアップのどこかのフォルダに入っているはずだが,現物をXOOPSから取り出すことにしよう.⇒エクスポートは完了したようだが,応答がない.画面が真っ白になっている.どうもどこかで失敗したような気配だ.ダウンロードに入っていない.かなりまずい.どこかにログがあるだろうか?⇒テキストを開くというオプションでlocalhost.odtというファイルがダウンロードされた.⇒エラーが発生している.

<br />
<b>Fatal error</b>:  Allowed memory size of 209715200 bytes exhausted (tried to allocate 167656235 bytes) in <b>C:\xampp\phpMyAdmin\libraries\zip.lib.php</b> on line <b>112</b><br />

max=209715200のとき,それより小さい167656235のメモリを確保できないということはどういうことだろう?zip.lib.phpが呼び出されているということは圧縮しようとしていたのだろうか?ファイルに保存するで圧縮なしを指定しているのだが…209715200 byte =204,800KB=200MB,167656235Byte=163,727KBだ.設定を調べてみよう.それにしてもなぜこんなに大きくなってしまうのだろう?このDBにはまだWPのデータは入っていない.いや,入っている.2回に分けていれているはずだが,全部入ったのだろうか?最後の記事は2012/03/12投稿だ.

源氏4の完全木テストとパックマン全点をPCで並行して走らせておいたのだが,完全木テストの方は5726面:12時間12分21秒で完了していた.パックマンの方でエラーが起きて停止している.基準ノードは#6で#292辺りでエラーになっているようだ.&rArr;どうも少し現象が違うように思われる.

この記事はどこかで見たような記憶がある.まだWPは動いていないはずなのだが…いや,前は動いていた.何かの理由でパスワードが必要になったのではないか?ログインして見えるようになった.確かに最後までロードされているようだ.200MBというのはPHPに設定した最大値と思われる.メモリ上限も同じ値になっているはずだ.phpMyAdminには別の制限値があるのだろうか?⇒テーブルキャッシュサイズというのがあるようだ.tmp_table_size,max_heap_table_sizeというのがある.phpMyAdminはconfig.inc.phpで設定しているが,この中にはないので,mysql/my.cnfかもしれない.⇒max_allowed_packet=16M という設定しかない.tmp_table_sizeというリテラルはmysql, phpのどこにも現れない.my.cnfに以下を追記してみた.

max_heap_table_size=200MB
tmp_table_size=200MB

動作は変化しない.PHP.iniでupload_max_filesize = 200Mにしたが変化しない.書き込みしたPHP.iniの場所が悪い.xamppではApacheの下のPHP.iniを見ている.⇒ダメだった.xampp/htdocsを開いてphpinfo()で確認してみよう.upload_max_filesize,max_file_size, memory_limit のすべてが200MBに設定されている.設定位置はapache/bin/php.iniだ.これらの値を400MBに変えてみよう.⇒これでようやく通った.SQLで98,717KBだ.このファイルをxoopsの名前で読み込んでみよう.⇒今度はXoopsCore25のphpMyAdminが開けなくなった.

XOOPS本体にはlocalhostでアクセスできる.これまではxampp7のコントロールパネルからMySQL→Adminで開いていたのだが…XoopsCore25/htdocsの下にはphpMyAdminは存在しない.xampp7/htdocsには存在する.Xoops25で画面が変わるたびにSmartyがポップアップしてくる.Preferences→System Options→General Settings→Debug modeでinline modeを選択してポップアップは出なくなったが,いつの間にか左サイドバーの画像ないし記事が消えてしまっている.この部分はログアウトしても更新されない部分だ.⇒この領域はlocal/phpMyAdminでエラーを表示したときの残影だ.

localhost/phpMyAdminでエラーにはなるが,再描画で表示される.一度表示されるとそのあとはエラーにならない.もしかするとクッキーが残っていたため?とも考えられる.データベースの名前は変更できるので現在のデータベースをXOOPS25とリネームしておこう.多分自動的には変更されないので,mainfile.phpを書き換える必要もある.oa00090878_babalabo.sql 95MBをインポートしてphpMyAdminエラーが起きた.

Incorrect format parameter

ただし,データベースは読み込まれているようだ.いや,まったく読み込まれていない.information_schemaなどへの書き込みが含まれているのだろうか?いや,そもそも Create Databaseがないように見える.以下の2行を追加したが動作は変わらない.

CREATE DATABASE IF NOT EXISTS `oa00090878_babalabo` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `oa00090878_babalabo`;

PHP.iniをチェックしておこう.xampp7/php/php.iniの設定は以下のようになっている.

  • memory_limit=512M
  • upload_max_filesize=40M
  • post_max_size=40M

下の2つを256MBまで上げてみる.⇒インポート完了した.mainfile.phpの仕様が変わっている.データベースに関する登録がない.XOOPS_DB_NAMEなどがどこかに設定されていなくてはならないのだが…xoops_trust_path\xoops_data\data\secure.phpに移動している.⇒データベース名を変更してlocalhostでサイトをオープン.ユーザを一人追加した.すでに既存DBをアップロードしてあるので,XOOPSのDBを切り替えて何が起こるのかを見てみることにしよう.少し乱暴なのでここで一応バックアップを取っておく.⇒画面が真っ白になって何も見えなくなってしまった.inline debugが作動していないのだろうか?⇒後から入れたDBをXOOPSとリネームした.DBはXOOPS25に戻して正常動作するようになった.

この状態を維持しながら,つまり動作可能な状態のまま少しづつ注入してゆくということは可能だろうか?いずれにしても必要になると考えられるから,最初に必要なモジュールの最新版を探してインストールするところから初めてみよう.その上で既存DBとの変分を見れば何をやればよいのかも少しは見えてくるのではないか?しかし,XOOPS DBで起動したとき何もエラーが出ないというのはまずいので,デバッグモードだけは設定しておきたい.いや,そもそも管理テーブルの構造自体変化してしまっているはずだから,テーブルを読み込むこと自体できていないのではないか?結局,新しい環境でテーブルを生成し,可能ならばそのフォーマットに合わせて旧データを手作業で改編・修正してゆくしかないのではないかと思う.

その前に日本語化するということをやってみよう.言語パッケージはextrasに入れることになっていたのではないかと思う.HELPページのボトムにエラーなどの記録が表示されるところがある.DEPRECATEDが1件発生している.ただし,これはログインできなければ見ることはできない.XoopsLanguages-masterをダウンロードしてみた.かなり大きい.圧縮した状態で35.5MBある.⇒解凍してみたが,イメージとはかなり違うものだ.japaneseの場合,coreとmodulesが入っていて,coreには2.0.18~2.5.0の5つのフォルダがある.modulesには12個のmoduleが入っている.つまり,個別のモジュールごとに各国言語化をやっているというイメージだ.想像では各国言語辞書のようなものがあって,それを切り替えるだけで一発で言語が切り替えられるものかと思っていたのだが…あまり,おもしろくない.

module部分はともかくcoreだけでも共通化できなかったものだろうか?XOOPS_Cubeは確かにそういう思想で作り込まれているのだが…その辺りで折り合いが着かなかったのかもしれない…WordPressなどはどうなっているのだろう?xlanguageというモジュールがある.あとで調べることにしよう.googlemapもある.以下のモジュールをダウンロードした.XOOPS MySQLをバックアップするbackupというモジュールもある.

  1. smartfaq
  2. tellafriend
  3. XpressMe
  4. Pico
  5. WebLinks
  6. Evennews Mailer
  7. Mantis Bug Tracker

GitHubには最初の2つしかなかった.pico, xpressもなかった.⇒Module RepositoryにはPicoがあった.XpressMeはxpressの代わりになるのではないか?XOOPS Xのモジュールは流用できないだろうか?あそこには bulletin, cubeUtils, d3forum, mobile_templates, search, xpress, hypconf, happy_linuxがある.特にhypconfが使えるとケータイ出力ができる可能性がある.XOOPSの日本語サポートサイトではprotectorの使用を推奨しないとして,翻訳も実施しないことを明言している.これはどういうことだろう?

ともかくダウンロードしたモジュールをインストールしてみよう.pmはXOOPS25に最初から入っている.tellafriendをインストールしてみよう.System Options > This Module Admin > Install module(2)をクリックすると,User ProfilerとTell a Friend が待っている.User Profilerでエラーが起きた.

Unable to install profile. Error(s):
Installing User Profile
Specified key was too long; max key length is 1000 bytes

Tell a Friendのインストールは成功した.modulesフォルダにコピーするとInstall moduleのページに自動的に現れる.smartfaq,EvenNews,mantis,Web Links,のインストールも成功.picoはhtmlの他にxoops_trust_pathを持っている.うまくゆくだろうか?⇒失敗.

Fatal error: require(): Failed opening required ‘D:/XoopsCore25/xoops_trust_path/xoops_lib/modules/pico/xoops_version.php’ (include_path=’C:\xampp7\php\PEAR’) in D:\XoopsCore25\htdocs\modules\pico\xoops_version.php on line 9

None All Errors (7) Deprecated (1) Queries (20) Blocks (0) Extra (2) Timers(5)

Errors

Unknown: filter_var(): FILTER_SANITIZE_MAGIC_QUOTES is deprecated, use FILTER_SANITIZE_ADD_SLASHES instead in file /modules/system/include/functions.php line 36

Unknown: filter_var(): FILTER_SANITIZE_MAGIC_QUOTES is deprecated, use FILTER_SANITIZE_ADD_SLASHES instead in file /modules/system/include/functions.php line 36

Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; weblinks_menu has a deprecated constructor in file /modules/weblinks/class/weblinks_menu.php line 36

Unknown: Non-static method weblinks_menu::getInstance() should not be called statically in file /modules/weblinks/xoops_version.php line 76

Unknown: Non-static method Database::getInstance() should not be called statically in file /modules/weblinks/class/weblinks_menu.php line 56

Notice: Only variables should be assigned by reference in file /modules/weblinks/class/weblinks_menu.php line 56

Warning: require(D:/XoopsCore25/xoops_trust_path/xoops_lib/modules/pico/xoops_version.php): failed to open stream: No such file or directory in file /modules/pico/xoops_version.php line 9

どうも失敗してしまったらしい.もう一度バックアップに戻ってやり直してみよう.⇒Tell a Friend は事前に入っていたので問題ないが,それ以外のSmartFAQ, EvenNews, Mantis, Web Links はUPDATEが必要というマークが付いている.しかし,実行するとエラーが発生する.必要なモジュールが実装されていないためだ.⇒ネットに接続していればUpdateできる.Updateは完了したが,エラーは残っている.

Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for tellafriend Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for smartfaq Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for evennews Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for mantis Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!Module File for weblinks Not Found!

やはりDBまで元に戻さないと修復不能なようだ.

コメントを残す

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

CAPTCHA