Windows Live Mailを廃してThunderBirdに全面移行する

ThunderBirdのローカルフォルダにインポートされたメールデータはディスク上に物理的に配置されたメールファイルと完全に同期している.この意味ではThunderBirdに移植されたデータは「完全」であると言える.一方Windows Live Mailのローカルフォルダ中には紛失したメールが山のように残り,かつ,物理的に存在しているのにWLMからアクセスできないフォルダ/メールやWLMからは一つのフォルダのように見えるのに外部からは複数フォルダの連結のようになっていたりなど,物理ファイルシステムとWLMの仮想ファイルシステムにははなはだしい乖離がある.これを整理してThunderBirdとSLMを完全に同期させようと試みたのだが,主に時間的な理由から断念することにする.もうこれ以上Windows Live Mailと付き合うのは止めることにする.実際,MSがWindows Live Mailのサポートを打ち切った理由もこの辺りにあるのに違いない.

本来ならWLMはこんなややこしいことをやらずに単純に物理ファイルシステム上でメールを管理しているだけでよかったはずだ.なぜこのような中途半端な仮想ファイルシステムを構築したのかその真意はわからないが,これ以上やっても時間の無駄であると思う.結局ThunderBirdに完全移管するということになるのだが,それはそれで問題がある.TBはある種のデータベースのような構造になっているため,メール単体をファイルとして扱うことがほとんど不可能になってしまうという点だ.ThunderBirdは基本的にThunderBird形式でしかエクスポートできないので,データが壊れた(壊された)ときにそれを修復する手段がほとんどない.データの保管場所が秘匿されていてエクスポート以外の手段ではそれを外部に持ち出すことができないという制約もある.WLMには保管場所を任意に設定できるという利点があった.

また,TBの内部ファイルは基本的にバイナリファイルと考えられるのでMeryのようなファイル検察ツールでテキスト検索できない可能性がある.ちょっと実験してみよう.⇒ヒットする可能性はあるが,大きなデータベースファイルなのでほとんど手がかりを得られない.つまり,検索はTB内部の検索ツールを使う以外の手段がない.TBではフォルダ単位でならemlファイルにエキスポートする手段があるのでなにか必要があれば奥の手として使うことはできる.もし,WLMが存続していれば,そこにこのフォルダを移植することは不可能ではない…TBをフォルダ階層ごとemlファイルとしてエクスポートできるツールがあれば安心なのだが…

Thunderbirdでメールや設定のデータを丸ごと移行(引っ越し)する方法を解説! https://applica.info/thunderbird-migration

ThunderBirdではヘルプ→トラブルシューティング情報にシステムのすべての詳細情報が記載されている.ここからデータ保管場所のフォルダを直接開くこともできる.ここまで徹底して内部情報を開示しているアプリケーションはちょっとないのではないだろうか?この意味では「ThunderBirdは信頼できる」と言ってよいのではないかと思う.このゼロトラストの時代に「信頼できる」ことがどれほどかけがえのないものであるかは言うまでもない.その意味ではいまはもう長年馴れ親しんできたWindows Live Mailに別れを告げるときではないかと思う.

ThunderBirdの馬場英治アカウントには18,446本,保存フォルダには73,060本のメールが入っている.この上にGmailからダウンロードした数GBのデータも管理しなくてはならない.WLMと同期を取るよりもThunderBirdの内部を整理して少しでも効率的に使えるように整備した方が前向きだ.ということで「決定」としたい.Gmailからダウンロードしたファイルはどうなっていただろう?⇒DOWNLOADSにAll mail Including Spam and Trash-001.mboxという名前で保存されている.mboxファイルはTBで読めるはずだ.インポートしてみよう.サイズは約2GBで現在馬場英治に入っているファイルサイズとほぼ同じだ.mboxファイルのインポートにはいくつかオプションがある.

image

このファイルには当然サブフォルダが含まれているものと考えられるので2番目を実行してみる.⇒入ってきた.フォルダを開こうとすると「…mboxの要約ファイルを作成しています」となり,1分後に開いた.48,011本のファイルがフォルダなしの完全にフラットな構成で並んでいる.確かにGmailにはフォルダという概念がないのだからある意味当然だ.表示項目に「タグ」というのがあるが,Gmailの「ラベル」とは異なるようで何も表示されない.馬場英治には18,447本ファイルが入っているが残りはどこから来たものだろう?⇒この差異はただ単純にIMAPからダウンロードされていないというだけだろう.

馬場英治の下に60個くらいフォルダがあるが,ほとんどはすでに閉じて過去のものになっていると思われる.これらを移動ないし削除すればGmailをもう少し軽くすることができると思われる.未読(236)をローカルフォルダにコピーしたら,Gmail上で「未読」というラベルが消えた(ように思われる).移動になっているのだろうか?毎日新聞(1667)ではコピー操作後に読み出しが実行され,最終的に653本がダウンロードされた.スレッド数1,664とファイル数653が一致しないのはなぜだろう?未読が消えた理由もよくわからない.馬場英治アカウントの未読をフォルダごと削除してみた.未読はWeb上で消えているので特に変化はない.毎日新聞をフォルダごと削除してみた.⇒2つのフォルダをゴミ箱から削除してみよう.⇒Web上でも消えた.毎日新聞というラベルも消えている.WLMではもちろんできている.これはかなり痛い.⇒勘違いしていた.MWBで連動していないキーボードを使っていた.

ステータスバーの赤いストップボタンで現在のエクスポートを停止し,日経ビジネスフォルダ内の全ファイルを右クリック→フォルダに移動でローカルフォルダに移動しようとして,IMAPとの接続が切断してしまった.いや,このメッセージはストップボタンの操作に関係するものかもしれない.東和銀行をコピーしたあと,メールを全削除でWeb上でも消えた.ラベルは残っている.ファイルを選択してフォルダに移動でもWeb上では消える.⇒どうも埒が明かないのですべてのフォルダを選択してローカルフォルダに一括コピーする.どのくらい時間が掛かるかわからないが,その間別のことができるだろう.⇒どうも一度に1フォルダしかやってくれないようだ.最初のフォルダは完了しているが,二番目のフォルダは空のまま…いや,いまごろになって日経ビジネスへのコピーが始まった.準備に時間が掛かっていたのだろう.

WMLの2つのアカウントは送受信を停止した.ThunderBirdでYAHOOアカウントの送受信ができるようにしなくてならないのだが…ThunderBirdにはアカウントのインポート機能がないように見える.「設定」のインポートは前にやったことがあるが変化はなかった.YAHOOアカウントにも4754本ファイルが入っているので整理しなくてはならない.⇒ThunderBirdにはフォルダを選択して購読/購読解除という機能がある.これは結構便利かも.メニュー→オプション→アカウント設定を開くと馬場英治が2つ登録されている.左サイドバーからはすでに削除しているが,どちらを削除すればよいのだろう?⇒左サイドバーにも残っていた.左サイドバーの名前からアカウント設定を開いてパネル左下のアカウント操作→アカウント削除で削除できた.

YAHOOアカウントもすでに登録されている.おそらくこれはWLMからインポートされたものだろう.この名前が左サイドバーに出てこないのは,WMLからインポートするとき馬場英治と一緒にインポートされたためだろう.一度このアカウントを削除してやり直した方が早いと思われが,WLMからインポートしたら同じ結果になるのではないだろうか?エクスポートされたファイルからではなくWLMから直接取り出しているように見える.手打ちした方が早いかもしれない.⇒メアドとパスワードを入力しただけであとはすべて自動でことが運んだ.⇒早速受信が始まった.⇒オプション→詳細→システム統合→Windows Searchによるメッセージの検索を可能にするという選択肢があった.返信メールを編集時,送信形式をHTMLからプレーンテキストに変更しても画面が変わらない…⇒アカウント設定→編集とアドレス入力→HTML形式でメッセージを編集するで設定した内容が優先する.オフ(テキスト)にした場合は編集画面のメニューで送信形式→HTMLでも画面は切り替わらない.

ThunderBirdにはアーカイブ機能がある.月別や年次で保存できる.これも便利なのではないか?とりあえず未分類でも月別になっていれば整理がつく.必要なときには検索すればよいし,検索結果を別フォルダに移してもよい.いずれにしてもフィルタリングは必要だ.フォルダはやはり階層化しないと長いリストになってしまう.

サーバ設定メッセージの保存終了時に受信トレイを整理する

というオプションがある.どういうことをやるのだろう?上で購読/購読解除というのがあるが,これはメールの配信を止めるというのではなく,フォルダ単位にロードするか否かを設定できるというだけのものだ.基本的にアカウントのフォルダは受信トレイ,下書き,ゴミ箱,送信済みだけとし,GMAIL ARCHIVEを改めARCHIVEとしてアカウントに関わりなく受信メッセージは基本的にすべてこのフォルダに移すことにする.ただし,発信元に対しこちらから送信する相手方の場合には,別途常用のフォルダを作成する.未分類メールは「月次アーカイブ」に移動する.以上をもってフォルダ構成の基本方針とする.

ThunderBirdのプロファイルフォルダの所在は(→ヘルプ→トラブルシューティング情報→アプリケーション基本情報→プロファイルフォルダ)で確認.メールの保存先は(アカウント設定→アカウント→サーバー設定→メッセージの保存)で指定することができる.添付ファイルの保存先も指定できる(オプション→添付ファイル).EドライブにThunderBird Dataというフォルダーを設け,ここにGMAIL, YAHOO, ATTACHMENTフォルダを作ることにする.念のためオリジナルの受信メールの保存位置をメモしておこう.

C:\Users\babalabo\AppData\Roaming\Thunderbird\Profiles\jieemox4.default-release\ImapMail\imap.gmail.com
C:\Users\babalabo\AppData\Roaming\Thunderbird\Profiles\jieemox4.default-release\ImapMail\imap.gmail.com

フィルターを作って実行しながらメールを整理するのが一番効率がよいが,フィルターを適用するタイミングが問題だ.メールチェックは主にスマホで実行されることになるから,未読のうちに転送されてしまうと却って手間が掛かってしまう.むしろ,明示的に「アーカイブ」を指定したときに実行するというのがよいのではないか?金融機関,ネットショップなどカテゴリ別けした方がよいのだが後日に回して,ここでは双方向通信の場合だけ別扱いすることにしておく.登録完了メールは別フォルダとする.請求・支払いというフォルダを作っておくことにする.

ヤマダ電機に走ってHDMIケーブルと切替器を買ってきた

Windows Live Writerでは内部のフォルダの包含関係と外部ファイルシステムで不整合が発生する場合がある.これは主に外部からWLMのデータフォルダ内にメールファイルを持ち込んだ場合に発生すると考えられるが,内部から見えて外部から見えない場合,外部から見えて内部から見えない場合の2つのパターンがある.後者の場合にはThunderBirdなどにインポートすれば見えるようになるが,前者の場合はTBでは失われる.これはおそらくWLMがある種の仮想ファイルシステムを内部的に持っているためと考えられる.TBではこのようなことは起こらない.というか,TBの場合にはそもそも単体のメールファイルを持っていない.

WLMのフォルダを内部と外部で共有するためには,WLM上でフォルダを作成する必要がある.このようなフォルダ内のメールファイルを外部操作できるかどうかをチェックしておこう.⇒表示されるまでにかなり時間が掛かるが入ってくる.外部で削除されたファイルのタイトルは残りは「メッセージが見つかりません」のように表示される.内部でフォルダを削除しても外部のフォルダおよびフォルダ内のメールは残っている.⇒この段階ではWLMのゴミ箱に入っている.完全に削除すれば外部フォルダとその中のメールは消える.この限りではWLMからは自分が生成したフォルダしか見えないが,ほぼ外部ファイルシステムと同期していると言えそうだ.⇒これでどう操作すればよいかという大体の見当が付いた.あとは,WLMとTBを比較して両者の差異を調整すればよい.これが現状でできる目一杯のところだ.一つ一つ見ていこう.

目標は現時点において,WLMとTBを完全に同期させるということだ.その後のことは別途考えよう.

  1. フォルダ名を保存フォルダに統一する⇒ただし,WLMとTBではこのフォルダの位置が1階層異なる.TBの場合にはこの上にローカルフォルダがあり,そこに受信箱,送信済アイテム,ゴミ箱がある.完全に一致させるにはどちらかで大規模なフォルダ移動が必要になるのでママとする
  2. ゴミ箱,受信箱,送信済アイテムを同期させる(空にする)
  3. WLMにAce-analyzer, ada-ageを復活させる⇒WLMの保存フォルダに新規フォルダを2つ追加し,ここに外部でメールをコピーする このファイル操作はWLMを再起動するまで反映しない
  4. WLMはGmail/2018(4418)という隠しフォルダを持っている このフォルダはTBからは可視ですでにフォルダ統合は完了している⇒Gmail/2018→Gmail/2018にファイルを移動する Gmailを削除し,Gmail1をGmailにリネーム⇒WLMを再起動してもファイルが入ってこない ⇒ ようやく収まった.手順としては,①関連ファイルを安全な場所にコピー,②外部で関連フォルダをすべて削除,③WLM内部でフォルダをすべて削除,④WLMのゴミ箱を空にする,⑤WLMでフォルダを作る,⑥外部でフォルダにメールを移動,を実行する必要がある.この手順を踏まないと動作はめちゃくちゃな訳のわからないものになるので注意
  5. TBにDeleted Items(12)というのがある.WLMには存在しない→削除
  6. TBにLive Mail 切 e8cというフォルダがあり,中に①ユーザ会事務局(127),馬場英治(350),馬場研究所(267)という3つフォルダが入っているがWLMからは見えない ただし,外部からは見える ⇒ まず,このフォルダをWLMの外に移動してからもう一度上記手順でファイルを再コピーするようにする 外部でファイル操作するときはWLMは閉じておく フォルダ名はLive Mail 切断としておく 
  7. TBにはOUTLOOK 2008(1)とOUTLOOK 2009(1)があるが,WLMからは見えない.物理的には見える これらのフォルダにはそれぞれ,55個,9個のサブフォルダが付属し,7746本と427本のメールが入っている まず,これらのフォルダを安全な場所に移動→フォルダ作成→コピーで復元する 55+9個のフォルダはWLMで直接新規作成するしかない

ヤマダ電機に走ってHDMIケーブルと切替器を買ってきた.ノート,ミニノート,タブレットの3機をすべてワイドスクリーンに繋いで拡張スクリーンが使えるようになった.かなりいい感じだ.最初の2つは問題なく接続できたが,最後のタブレットではエラーが発生し,OSの再起動になってしまった.Kernel Security Check Failureというエラーが起きている.また,水平に置いているタブレットが縦置きの画面になったり,上下反転などの現象も起きた.マルチスクリーンの調整などをやって現在のところは一応落ち着いている.

マルチスクリーンを切り替えたとき,すべてのウィンドウが内蔵ディスプレイに戻ってしまうため,もう一度マルチスクリーンに戻ったときはいちいちウィンドウを外付けディスプレイに移動しなくてはならないという面倒はあるが,その辺りはないものねだりかもしれない.まぁ,これで開発環境はほぼ整ったのではないかと思う.これで腰を落ち着けて仕事ができる.タブレットで起きているKernel Security Check Failureというエラーを調べておこう.

Windows10で「Kernel Security Check Failure」が頻発する原因と対処法 https://itojisan.xyz/trouble/15056/

いろいろな原因と対策が挙げられているが,まずディスプレィドライバーを更新してみよう.⇒最新版がインストールされたので再起動してみよう.どうも何か却って悪くなってしまったような気がする.画面が真っ黒になって縦縞のフラッシュが起きている.シャットダウンして再起動はできたが,マルチスクリーンで立ち上げると内蔵ディスプレイで上下反転が起きるという現象が再発している.これはおそらくマルチスクリーンの設定が戻ってしまったためと考えられる.右クリックでメニューも出ない.⇒ダメだ.やはりブルースクリーンが起きてしまう.⇒設定→システム→ディスプレイ→マルチディスプレイ→表示画面を複製するを表示画面を拡張するに変更.これで右クリックからメニューが出るようになった.⇒問題なく立ち上がるようになった.今度は内蔵ディスプレイのみで起動してみる.⇒まず問題なさそうだ.

Windows Updateを実行してみよう.⇒Windows 10 Version 1909の機能更新プログラムが出てきた.この更新は気が進まないのだが,このタブレットはサブのサブでもあるので一応やってみることにしよう.カスペルスキーが前回起動できなかったと言っているのが気になる.レポートの送信にも失敗している.安全なアプリケーションだけを実行がオフになっていたので有効化しておこう.オンにすると一度システムファイルのスキャンを実行するがこれがまた時間が掛かる…

Windows 10 バージョン 1909 の新機能は、Windows 10 バージョン 1903 (2019 年 10 月 9 日リリース) の最新のマンスリー品質更新プログラムに含まれていましたが、現在は休止状態です。 これらの新機能は、Windows 10 バージョン 1909 の機能をアクティブにする、すばやくインストールできる小さな「マスター スイッチ」である イネーブルメント パッケージを使用して有効にするまで休止状態のままになります。

Windows 10 Version 1909はアンインストールができる.Update→いますぐ再起動で立ち上がってこない.シャットダウンしてしまった感じ.よほどできが悪いのだろうか?電源オンしたら再起動していますになった.カスペルスキーが製品の再読み込みを実施している.スタートメニュー→Windows管理ツール→メモリ診断を実行してみた.OKのようだ.ハードディスクのチェックもやっておこう.スタートボタン→右クリック→PowerShell→chkdisk c: /f→次回のシステム再起動時に、このボリュームのチェックをスケジュールしますか?→Y→再起動 ⇒chkdiskというコマンドは知らないという.chkdsk c: /F としなくてはならない.⇒事後にイベントログをチェックしてみたが問題なかったようだ.システムファイルチェックもやってみる.

システム ファイル チェッカー ツールを使用して不足または破損しているシステム ファイルを修復する
https://support.microsoft.com/ja-jp/help/929833/use-the-system-file-checker-tool-to-repair-missing-or-corrupted-system

DISM.exe /Online /Cleanup-Image /RestoreHealth /Source:C:\RepairSource\Windows /LimitAccess

実際には/Sourceから下の部分を省略して始めてしまったが,チェックは実行されている.⇒「復元操作は正常に完了しました」が出た.実際に修復しているのかどうかは不明.次に

sfc /scannow

を実行してみる.⇒「整合性違反を検出しませんでした」で完了した.一応システム的な問題ではなさそうに思われるので,原因は「マルチスクリーンの設定上の不備」のようなものだったのではないかと推定される.さて,もう一度WLMとTBの同期作業に戻るとしよう.

  1. WLMにOUTLOOK 2008とOUTLOOK 2009フォルダを作成し,その下にサブフォルダを配置する ⇒ edb.chk, edb.log以下無数のlogファイルがWLM内に作られている.このファイルはおそらくファイルシステムとの整合性を維持するための遅延コミットメントに使われるものではないかと推定される しばらく放置しておこう
  2. WLMを閉じてそれぞれのフォルダにメールをコピーする ⇒ どこかでやり損なっているようだ OUTLOOK 2008/FORGE(85)の中身が空になっている.もう一度TBから取り出さなくてはならない.これは一通り終わってからにしよう ⇒ 対処した
  3. EDGE 2005はEDGE 2006の誤り,OUTLOOK2009はOUTLOOK 2009の誤り ⇒ 修正はWLMに戻ってから実行する ⇒ WLMでフォルダ名を変更したがファイルシステム上には変化は現れない ファイルシステムでフォルダ名を変更して同期させようとしたところ,また不整合が発生してしまった(泣) OUTLOOK 2009には空フォルダだけが残り,OUTLOOK2009という元のフォルダが復活している また,EDGE 2005は空になり,EDGE 2005(1)というフォルダが別に作られている WLM上のEDGE 2006は空(ラベルは残っているが「メッセージが見つかりません」でファイル不在)になり,EDGE 2005が復活している どうにもならない.ファイルを温存させるためフォルダ名不整合のまま放置する
  4. ワンデイズワンというフォルダが落ちている ⇒ WLMにフォルダを作り,TBからドラッグ&ドロップでファイルをコピーすることができた.ただし,複数選択できないので一通づつしかコピーできない
  5. クラブハウス管理人フォルダには有効なメールは4本しか残っていない ⇒ この件はあとで

Windows Live Mailのフォルダ管理と外部ファイルシステムの不整合

長年の懸案だったメールボックス中の重複ファイルの削減という課題がようやく片付いた.こんなに簡単に終わるものならもっと以前にやっていたら気分も随分違っていただろうに…フォルダ圧縮後にもう一度Windows Live Writerのエクスポートを仕掛けて寝た→完了.前回と比較してみよう.エクスポートしてから重複削減したものは6.26 GB (6,725,036,675 バイト),重複削減してからエクスポートしたものは3.95 GB (4,247,574,161 バイト)で圧倒的に後者の方が小さい.原理的には2つは一致しなくてはならないのだが,ファイルの配置などいろいろな問題があるのだろう.いずれにしても後者の方がより整理されたものになっていることは間違いない.さて,このあとどう進めるか?

ThunderBirdのインポート・エクスポート用アドオンとしてはImportExportTools NGしか見当たらない.一応インストールはできているが,「ツール」の中にメニューとして現れない.オプションの設定画面だけは表示できるが,「実行」することができない.添付付きメールを複数選択して右クリック→選択済みメッセージを保存→プレーンテキスト(添付ファイルを保存)で下記のようなImportExportTools NGのパネルが出てくるので機能していることは確かだが…

image

画面右上のメニューボタン→ツール→設定とデータのインポートでは以下のパネルが開く.

image

すべてインポート→次へでは下記パネルが出てそれ以上進まない.

image

先に「設定」だけをインポートするという話があるので,もう一度やってみる.Windows Live Mailを選択→次へで「Windows Live Mailの設定を正常にインポートしました.」→「完了」となるが,次にメールボックスを選択して次へでは選択肢からWindows Live Mailが消えてしまう.意味不明で不可解な動作だ.

image

インポートする項目としてフィルタを選択すると選択肢としてBecky Internet Mailしか現れないのでもしかするとこれは最初からの「仕様」かもしれない.⇒ImportExportTools NGの使い方がようやくわかった!

qa.itmedia.co.jp/qa9344582.html

このアドオンの操作はつねにフォルダを選択することから始まる.フォルダを選択→右クリックで出るメニューの一番上にImportExportTools NGが出てくる.このサブメニューの中にImportExportTools NGのすべてのコマンドが入っている.

image

Windows Live Mailのメールはすべてemlファイルなのですべてのフォルダをこの方法でインポートないしエクスポートすることができる.やってみよう.その前にThunderBirdのローカルフォルダをエキスポートしてみる.⇒ローカルフォルダを選択して右クリック→ImportExportTools NG→すべてのフォルダをエクスポート(フォルダ構成を含む)を実行したが,Gmailからのダウンロードが始まってしまった.画面最下部ステータス行に以下が表示されている.

babalabos@gmail.com:googleにメッセージをダウンロードしています

どうも意味がわからない.というか,2つのアカウントが重複登録されている.馬場英治とbabalabos@gmail.comだ.ちらも受信トレイを持っているが,馬場英治の方は空.メールアカウントはどちらもbabalabos@gmail.comでダブっている.どういうことだろう?どこかで手順を間違えたのかもしれないが,同一アドレスを持つ2つのエントリが登録されてしまうというのはかなりおかしい.馬場英治を一旦削除してbabalabos@gmail.comの表示名を馬場英治に変えてみよう.いや,表示名まですっかり同じだ.これはなにかの誤動作としか思えない.

ThunderBirdではフォルダをドラッグして移動できる.他のメーラでもこんなことができるのだろうか?⇒いや,確かにできる.WLMでもドラッグ&ドロップしてフォルダを移動できる.知らなかった!もう一つこれまで気付かなかったことがある.カスペルスキーがブラウザのアドレスバーに交番のお巡りさんのように常駐していることだ.タブレットでグーグル検索からどこかのサイトにジャンプしたら画面がバタバタ暴れ始めた.通常なら電源を落としてしまうところだが,このタブレットはサブのサブという位置付けなので原因を突き止めてみようとして調べているうち,カスペルスキーのアイコンに気付いてクリックすると①Webトラッキング防止,②バナー広告対策,③セキュリティキーボードを開くがあり,②のバナー広告対策→ブロックで一発で正常に戻った.もう一つGmailのバックアップが取れるというのも知らなかった.

Gmailのバックアップ方法と「.MBOX」ファイルの確認法
https://www.lifehacker.jp/2018/08/how-to-back-up-your-gmail-and-view-mbox-files.html

これを使えばGmailデータを任意の時点でローカルに保存できるからいつでもメールを削除してサーバー負荷というよりクライアントの負荷を軽減することができる.昨日tmpに移動した重複ファイルを削除中に以下のようなエラーが出た.

image

そのあとは順調に進んでいる.まだ50%を超えたところだが,安全のためこれが完了してから次の作業に移ることにする.いや,並行してGmailのダウンロードくらいやっておいてもよいのではないか?⇒実行した.2ヶ月に一回エクスポートするというオプションがあったのでチェックしておいた.上のエラーがもう一度出た.進捗は75%.⇒完了した.残っていたファイル2本も手動で削除できた.GmailからエクスポートしたメールはGoogle ドライブに入っている.ダウンロードしておこう.⇒おかしい.入っていない.どこへ行ってしまったのだろう?転送完了のメッセージも入ってこない.

一時間前に Archive of Google data requested という通知は受け取っているが…そんなに長い時間が掛かるとは思われない…容量不足だろうか?無料で使える15GBのうちすでに7.3GB使っているので残りは7.7GBだ.ThunderBirdに入っている分では2GB程度しかないので十分間に合うような気はするのだが…This process can take a long time (possibly hours or days)とあるので一日以上掛かってもおかしくないが,なぜそんなに掛かるのかが疑問だ…No completed exports availableとあるのでエクスポートは未完了だ…待つしかないだろう.WLMからThunderBirdへのインポートをやってみよう.

「フォルダからすべてのemlをインポート(サブフォルダを含む)」でSLMのStorage Folderにあるすべてのファイルとフォルダを直接インポートしてみる.これも相当時間が掛かりそうだ.一応動いているが,フォルダが復元できるかどうか?が問題だ.Eドライブも使いまくっているので,残り9GBしかない.ここにはつねに30GB程度の空き容量は必要だ.SMLからエクスポートしたメールは不要になったので削除してよいだろう.⇒しかし,いまは昨日の大量重複ファイル削除でそれどころではないらしい.アドレス帳は完全に空になっているが,どこかにあるはずだから復元しておきたい…

Googleドライブからダウンロードしているうち椅子で寝てしまった.「失敗-アクセスできません」で止まっている.原因は不明.もう一度やり直して今度はスムーズにダウンロードできた.2,107,068KBのmboxファイル.この数字は2GBをわずかに超えているが,1パケットで送られてきた(設定では2GBで分割することになっていた).パッケージは2つに分割されていて2個目は101KB,archive_browser.htmlというのが入っていた.HTML形式の送り状だ.ThunderBirdはmboxをインポートできるが,WLMはできないかもしれない.

mboxを直接開く方法はないので(単体のツールは探せばあるかもしれない…),ThunderBirdに一度インポートするしかない.ThunderBirdに取り込めばemlでエクスポートすることもできる.ThunderBirdは「babalabos@gmail.com 受信トレイにメッセージをダウンロードしています (1/1)」でプログレスが止まった状態になっている.WLMからのインポートはほぼ完了しているように見えるが,よくチェックしてみると不完全な状態で終わっている.どうもフォルダの1階層しか展開していないように思われる.いや,かならずしもそうでもない.入っているところもある.WLMの方でフォルダ階層に毀損がある可能性がある.

メーラーで(に限らず)一番重要な機能は検索だが,ThunderBirdとWLMでヒット数が異なる.TBには見落としがある可能性がある.ただし,転送できていないフォルダがあるようなので確定ではないが…使い勝手はもしかするとTBの方がよいかもしれない.検索条件の設定にAND・ORなどが使える.TBのステータスバーには「babalabos@gmail.com 受信トレイにメッセージをダウンロードしています (1/1)」しか現れていないが,プログレスバーは伸びているのでGmailを受信しているかないしインポートの続きをやっているのだろう.進捗が止まらないと状態はわからない.GmailのアーカイブはTBに取り込むしかないが,静止してからにしよう.

一応ThunderBirdもWindows Live Mailとほぼ同等に使えるということが確認できたので,ThunderBirdをデフォルトメーラーとして使うという方向が見えてきた.WLMを止めるのはサポート停止というのが最大の理由だ.セキュリテイは何を置いても最大のファクターだ.XOOPSの復元作業からメーラーの移転にフォーカスが移ったのはどの辺りだったろう?⇒きっかけは2 in 1 ミニノートが戻ってきたというところだ.ミニノートの作業環境を整える作業の一貫としてメーラーの整備などが必要になった.Diginnosノートをワイドスクリーンに繋いでを主力開発機とし,ミニノートをネットアクセスのフロントエンドとしてオンラインとオフラインを厳格に切り分ける仕組みはほぼ確立した.タブレットでもう一面使えるというのはかなりうれしい.ミニノートは9インチでさすがに画面が小さ過ぎる.

ThunderBirdの難点は重複ファイル検査などメールを単体のファイルとして操作できないという点だ.将来的に外部からインポートしたりする場合には重複などが発生する可能性はつねに存在する.その点を除けばThunderBirdに移行するときの問題点はほぼクリアできたのではないだろうか?ここまで落ち着けば,メールの整理などにも着手できる.毎日多量のメールが入ってくるのでそれらを自動でフィルタリングするなどの仕組みも整備しなくてはならない.また,2つのアカウントにダブって配信されてくるニュースレターなども整理する必要がある.メールチェックはスマホでザッピングするのが一番速いのでメーラーは検索と蓄積,送/返信がメインになるだろう.今後は以前のように受信箱を壊されるなどのアクシデントがなければよいが…ったくもう,何度壊されたかわからない…アドレス帳の復元はかならずしも必須ではない.ユーザ会サイトが復活すればメール配信機能も整備できるだろう.

ThunderBirdは依然として受信中の状態になっているが,一度落としてみよう.不都合があればなにかメッセージが出るだろうし,おそらくTBはバックグラウンドで処理を続けることができるはずだ.⇒問題なく終了して再起動できた.同一アカウントが馬場英治とbabalabos@gmailという2つの名前でダブって表示されるというのはうれしくないので削除しておきたい.一度バックアップを取ってからやってみよう.アカウントを削除するとそれ以下のフォルダがすべて削除されてしまう…⇒アカウントのメニューには削除という項目がない.⇒アカウント名を右クリック→設定→アカウント設定→アカウント操作→アカウントを削除で削除できる.データも同時に削除したが特に問題は起きていない.babalabos@gmail.comは馬場英治にリネームした.

ThunderBirdをデフォルトメーラとして使うとすれば,WLMからインポートできなかったフォルダを修復しておかなくてはならない.まず,それをやっておこう.その前にada-ageを復旧しておく必要がある.Ace-analyzerとada-ageはGmailの内部でもイレギュラーな状態になっている.WLMにはImapにAce-analyzerがイレギュラーな形で残っている.⇒Gmail側にAce-analyzerというラベルを追加して同期できた.以下ポイントを書き留めておこう.

  1. GmailでAce-analyzerを削除
  2. TBのGmail/2018(4418)を移動→Gmail(1)/2018(1112)
  3. TBのGmail/2018を削除
  4. Gmail(1)をリネーム→Gmail
  5. WLMのクラブハウス管理人をTBにインポート⇒113通のうち5通しか転送されない 
  6. クラブハウス管理人から別フォルダにコピーしようとしてエラーになる⇒メールを開けない このようなメールは無数にあるが,原本がどこかに残っている可能性はある もしなければそのメールは恒久的に失われたものと考えるしかない
  7. WLMのグラフ理論フォルダがインポートできない 内部には有効なメールも存在する ただし,多階層になっている⇒WLMで見るとグラフ理論の下に複数フォルダが存在しているが,エクスプローラでは見えない
  8. WLM内でフォルダを移動してもエクスプローラで見えるようにならない 新たにサブフォルダを作れば見える⇒フォルダ階層を手動で生成してそこにメールを移動すればよいのではないか?⇒確かに グラフ理論の下の階層構造を手動で複製してそこにemlファイルを移動するようにしてみよう フォルダはエクスプローラ上で作成する ⇒いや,ダメだ.外部でやったフォルダ操作はWLMにはまったく反映されない.
  9. グラフ理論の下のフォルダをGraph Theoryに生成し,メールを移転

どうもかなり厄介だ.WLMではファイルシステムと内部のフォルダが整合していない.ファイルシステムで見えているフォルダとその中のファイルがWLMから見えない場合,逆にWLM内では見えているフォルダがファイルシステム上に存在しない場合がある.このような場合にはメールは読み取り不可となったり,転送不能となったりすることがある.WLM内部で生成したフォルダは外部からも見えるのでフォルダを作り直してそこにメールを送り込むとうまくゆく場合があるが,うまくゆかない場合もある.ThunderBirdではファイルシステム上に存在すれば,WLMから不可視でもインポートできるが,逆にファイルシステム上に存在しない場合はWLMから見えていてもインポートすることができない.

すでにこのような「アクセス不能ファイル」のかなりをゴミ箱に捨てて恒久的にも廃棄してしまっているが,もう少し慎重に作業する必要がある.そのためには同時に複数の画面が開ける程度の大型のスクリーンがどうしても必要だ.変換コネクタがあれば開発機で使っているワイドスクリーンに出力できるのだが…そうなるとビデオ切替器もほしくなる…

Windows Live MailからThunderBirdに乗り換えるべきか否か?それが問題だ

カスペルスキーの完全スキャンは1分前に完了している.7,0759,799本のファイルがスキャンされた.Windows Live Mailの未開封メールにはまだ2万通近くのメールが残っている.未開封メールは昨日すべて保存フォルダに移したつもりだったのだが…IMAPではフォルダから移動しただけではサーバーから削除したことにはならない.どうすればよいか?フォルダから移動したあと,未開封メールに残ったメールを削除ということはできるだろうか?多分,ダメだと思う.フォルダ間で移動した時点で未開封メールから消えているはずだ.一旦ゴミ箱に移してからそれを保存フォルダに移すというのはどうだろう?それなら効くかもしれない…

Yahooメールの方はPOPで受信しているので多分これまでの手順で始末できていると思う.Gmailの馬場英治アカウントが問題だ.日常的にWLMを使うとしたらこの問題を解決しておかなくてはならない.IMAPはサーバー上のすべてのメールをダウンロードしようとするのでサーバー側で削除されないといつまで経っても軽くならない.いま現在,馬場英治:朝日新聞のフォルダから360本くらいのメールを取り出すだけで多大な時間を消費している.もう一つ,ネット上で配信されてくる通知のダブリの問題も片付けなくてはならない.多分配信元に複数のメアドが登録されているためと思われるが,トラフィックを減少させるためにはこれを一本化する必要がある.WLMが今日のメールをすべて受信し終わらないと何もできない.しばらくは放置するしかない.

気になるのはMeryでファイル検索がまったくできない状態になっているという点だ.なにかインデックスファイルを作りそこなって間違った範囲しか検索できていないような気がする.エクスプローラの方がまだまともは結果を吐き出してくる.Meryを使えば見落としのない完全な検索ができると喜んでいたのにがっかりだ.どうも完全にバカになってしまったような感じだ.MeryはインストールしないでEXEを直に実行するというタイプのアプリなのだが…※ 一度検索を実行するとそのあとの検索時間がやけに短くなるのでどこかにインデックスファイルを作っているように見えるのだがどこにも見当たらない…⇒Meryのデータが以下にあった.C:\Users\babalabo\AppData\Roaming.Mery.hisとMery.iniの2つだがそれぞれ16KB, 26KBでそれほど大きなものではない.

※これは正しくない.MeryのディストリビューションにはEXEのインストーラとZIPがある.後者の場合は任意のディレクトリに配置するだけだが,前者はアプリとして登録される.

このフォルダを隠しても動作はまったく同じだ.前回検索条件はレジストリに入っているようだ.検索結果が信頼できなければ検索はまったく意味がない.なんでこんなことになってしまったのだろう?なにか使い方が間違っているのだろうか?このエディタはとても使い易い上にファイル検索ができるのでとても重宝していたのだが…どこで何が変わってしまったのか?まったく見当がつかない…エディタを取り替えるしかないのだろうか?Windowsで走るEmacsというのが存在するようなのでそれを導入してみようかな?サクラエディタはgrepとdiff機能がある.前に一度TeraPadというのをダウンロードしたことがある.

サクラエディタを使ってみた.検索はかなり遅いが確かなようだ.ただし,設定によって異なる結果になるところが気になる.文字コードセットを自動選択とすると49件,UTF-8では53件と差異が出てしまう.また,結果の表示も自動選択では文字化けしてしまう.UTF-8を指定すれば画面上は正しく表示されるが,ファイルを開くとSJISになってしまう場合がある.どうもいまいち使い勝手がよくない.TeraPadではGREP機能はプラグインになっている.emacsをダウンロードしてみたが,無茶苦茶大きい.215MBもある.https://github.com/mhatta/emacs-26-x86_64-win-ime にはバイナリがあったのでダウンロードした.emacs-26.3_x86_64-win-ime-20191231.zip それでもかなり大きい.総量がいくらあるのかはダウンロードしてみないと分からない…

ファイル検索専用ツールを使うという手もある.前にeverythingを導入しているがすでにアンインストールしてしまった.何が気に入らなかったのか忘れてしまったが,もう一度評価してみたい.使い勝手ではMeryがベストなのだが,どうもMeryはバイナリファイルの検索までは実行してくれないようだ.逆に言えばサクラエディタで文字化けのような動作はある意味当然なのかもしれない.いや,Yokkaがある.前から使っていたものだ.確かにこれは検索エンジンとして実績はあるが,Meryと同様いや,それ以上にファイル種別に敏感なようだ.やはりファイル検索ではサクラが最強であるように見える.53件検出している.これはUTF-8を指定した場合だ.エクスプローラでは11個しか検出されないが,項目をダブルクリックするとWLWで開いてくれるところは好感が持てる.

サクラの検出結果はファイル単位ではエクスプローラと一致する.つまり両者の結果はおそらく正しい..Yokkaは遅すぎてまだ結果が出ていない.テキストファイルに限定すればMeryはやはり最速と言ってよいのではないだろうか?サクラはその中間という感じだが,コード自動選択では文字化けしてしまうというのが難点だ.結論的にはWLWのWPOSTファイルを検索するのならエクスプローラが最適ということになりそうだ.Yokkaは遅過ぎて使い物にならない.ファイル検索についてはMeryとエクスプローラを併用ということで決着しておく.

ThunderBirdは2018/12/24にインストールして動作を試している.ThunderBirdはインポート・エクスポートを外部プラグインに頼っている.そのプラグインが,本体とバージョンが合わないという理由でインストールできなかったため最終的に使用を断念している.ThunderBirdhaはWebメールは何でも読めるのでWLMの代替にならないということは考えられない.もう一度インストールして試す価値はあると思う.あら,トップページにカンパ要請がある.

image

プログラムは40MBというかなり大きなものだ.折しもこんなもの無料配布してえらいな~ゼルコバの木でもそうできればな~と思っていたところだったので,小額を寄付することにしよう.1回のみ2,240円は少し高いので1,120円.そのくらいはまだ残っているだろう…ダメだ.通らない.デビッドカードは受け付けていないのだろうか?

新しいThunderBirdでは受信トレイと個別メールがタブで開かれるようになっている.これは悪くないかもしれない※.Webメールの一番の欠点は受信箱と受信したメール,それに対する返信を編集する画面が一つの画面に混在しているためとても使い辛いという点だ.この点はWLMの方がましだが,ThunderBirdのように思い切って独立のタブで管理するようになると画面も広々と使えて分かり易くなると思う.動作もWLMよりだいぶ軽い気がする.この感じなら懸案の「メールの整理」も思い切ってできるかもしれない.

※いや,よく見るとGmailもYahooもタブ式になっていた.これまで気づかなかっただけだ…Webという先入観念があるからだろうか?とても使い辛い感じを持っているのだが…

どうも失敗してしまったようだ.Gmailの2つのフォルダからローカルフォルダにメールを移したあと,うち1個を削除→そのあと,オプション→添付ファイルで保存先を東芝HDのThunderBird Mailに変更→再起動でローカルフォルダに移したメールが消えてしまった.「保存先」というのは添付ファイルの保存先の意味であり,ローカルフォルダを移転したことにはならないが,なぜかローカルフォルダが初期化されてしまった.いや違う.その前にローカルフォルダを東芝HDに移転していた.壊れてもいいようなデータで動作テストしておけばよかったのだが…いや,残っていた!ここにあるものをコピーすれば見えるようになるだろう.

C:\Users\babalabo\AppData\Roaming\Thunderbird\Profiles\jieemox4.default-release\Mail

ダメだ.フォルダをコピーしただけでは見えてこない.ローカルフォルダ内のフォルダは2つのファイルからなる.*.msfファイルがフォルダで拡張子のないファイルがメール本体だ.メール本体部はメール全体を連結したテキストファイルなのでエディタで開いて読むことができる.どこかにフォルダのメタ情報が格納されているところがあるはずだ.それが判れば復元できる可能性はあるが…まぁ,仕方ないとしよう.インポートはプラグインなしでできるようになっているようなのでWLMからインポートしてみよう.WLMを開いて2つのアカウントで受信エラーが発生するようになってしまった.ThunderBirdではGmailアカウントしか開いていないから,ThunderBirdの導入が原因であるとは考えられない…

○○○○ アカウントでメッセージを送受信できません。 ホスト ‘pop.mail.yahoo.co.jp’ が見つかりません。サーバー名が正しいことを確認してください。

サーバー: ‘pop.mail.yahoo.co.jp’
Windows Live メール エラー ID: 0x800CCC0D
プロトコル: POP3
ポート: 995
セキュリティ (SSL): はい
ソケット エラー: 11001

馬場 英治 アカウントでメッセージを送受信できません。 ‘AI’ フォルダーからのヘッダーのダウンロードは完了しませんでした。 ホスト ‘imap.gmail.com’ が見つかりません。サーバー名が正しいことを確認してください。

サーバーの応答: ネットワークに関係ないエラーのため、IMAP コマンドはサーバーに送信できませんでした。メモリが不足している可能性があります。
サーバー: ‘imap.gmail.com’
Windows Live メール エラー ID: 0x800CCC0E
プロトコル: IMAP
ポート: 993
セキュリティ (SSL): はい

ともかくWLMからThunderBirdへのエクスポートを試してみよう.これに失敗するとすべてがおしゃかになってしまう可能性もある.ThunderBirdを立ち上げるとこんどはThunderBirdでもGmailに接続できないというエラーになった.ただし,ローカルフォルダの2つのフォルダ(うち1つは空)の内容は正しく読み出せるようになっている.これは多分上記でフォルダをコピーしたのが見えるようになったためだろう.

WiFiルータを切り替えていなかった.⇒メールの移動を実行しようとしてステータスバーに「babalabos@gmail.com imap.gmail.com を調べています」を出したままロック状態になっている.⇒Gmailから2通受信したという通知が出た.そのあと,2145通のメールの受信が開始された.ともかく現在保管されているメールをどうにかしないことには始まらない.しかし,その前にWLMからメッセージをインポートできることを確認しなくてはならない…

WLMの利点はメールが個別ファイルになっているという点だが,それが逆に弱点になるという可能性もある.データの可搬性ということから言うと個別ファイルの方がずっと扱い易い…ThunderBirdに移行するとなるとその点も考えなくてはならない.⇒おかしい.どこかでインポート/エキスポートができる場所があったと思ったのだが,見つからない.「おすすめのアドオン」にはある.「複数ファイルを選択して保存」することはできる.ファイル形式はEMLだ.多分ThunderBirdもこのファイルを読み込めるはずだから,いざとなったときには逃げ場もある.⇒いや,あった.右上のメニューアイコン→ツール→設定とデータのインポートというのがある.⇒すべてインポート→データのインポート元のアプリケーションが見つかりませんでしたで終わり.

ImportExportTools NGはインストールできたが,実行メニューがどこにもない.設定パネルは開ける.また,無効化・削除のボタンも表示されている.⇒アドインは「ツール」の一番下に表示されるという話だが,何も追加されていない.上記の「設定とデータのインポート」でまずWindows Live Mailの「設定」だけをインポートする必要がある.⇒以下のパネルでぐるぐるが回り続けている.

image

ようやく完了したが,その先がない.ネットで調べるとアドオンをダウンロードしてインストールする手順が紹介されている.ThunderBird内のリンクからサイトに行きダウンロードしたが,「ファイルからインストール」しようとすると,以下のメッセージが出る.

image

何だこれは?振り出しに戻ってしまった.結局今回もインポートできないということになる.⇒以下に新しいバージョンがあった.

https://addons.thunderbird.net/ja/thunderbird/addon/importexporttools-ng/?src=cb-dl-mostpopular

しかし,動作は結局同じになった.ツールタブにはアドオン名が現れないので操作しようがない.この問題はGitHubでも現在進行形でディスカッションされている.議論はクローズとオープンの間を行ったり来たりしている.いずれにしても2年前からまったく進展していない.これが「フリーソースプロジェクト」の実態かと思うとがっかりだ.(失礼,人のことは言えないね)

アドオンはそれぞればらばらの個人が開発しており,それをまたばらばらの個人がプライベートにデバッグしているような状況が続いている.WLMにもサポート切れという問題があるが,ThunderBirdにも問題がある.Windows の Mail ソフトなどに強制連行してゆくような無形の圧力をひたひたと感じる.悪貨はよく良貨を駆逐するというところだろう.

WLMのメールのエクスポートはまだ終わっていない!⇒今のところThunderBirdにWLMのメールをエクスポートする手立てはないが,その前に一つ片付けておかなくてはならない大仕事がある.WLMのフォルダには重複メールがうず高く積もり上がっている.これをエクスポートする前に整理しておかなくてはならない.なぜなら,TBに移植してしまうと1フォルダ1ファイルになってしまうので,単体ファイルの重複というのを検出することが原理的に不可能になってしまうからだ.つまり,それをやろうとするなら今しかチャンスはない.しかし,ThunderBirdで小さなアドオンのバージョンアップにあれほど手こずっているとしたら,安易に移管するというのも考えものであるような気がする.ThunderBirdしか代替候補はないのだろうか?

現状ネット上ではWindows 10のメールアプリ,Microsoft Outlook, ThunderBird の3択という状況になっている.となれば,ThunderBirdしかないような気もする.昔はもっと選択肢があったような気がするのだが…しかしーーどうも形勢はXOOPS Xが現にそうであるようにかなり追い込まれているような印象がある.

WLMに重複ファイルが重積しているというのは過去数次にわたるアタックの後遺症とも言える.ようやくその過去の傷も癒えてかさぶたを剥がすことができるようになった.FileManyをインストールしてエキスポートしたWLMをチェック,以下のレポートが返ってきた.

image

検査したファイルは601163本※,うち769種,1543本の重複ファイルが発見された.重複を除けば,774本の重複ファイルが存在すると言ってよいだろう.「作成日が古いファイルを残して選択」という基準で削除することにする.事後処理としては別フォルダに移動などもできるが,ゴミ箱を空けてあるのでゴミ箱へ直行でよいだろう.チェックしてなにか問題があればゴミ箱から拾い出すこともできる.\復元されたアイテム\2020-03-17に集中しているようだ.しかし,全体のボリュームからいくと0.1%くらいにしか当たらない.ひょっとしたら半分くらいになるのではと思っていたのだが…エクスポートしたときの現物のサイズを測っていないので正確なところは分からない.

※この数字は上図の処理時間のあとの数字を取ったものだが,明らかに誤っているように思われる.これは秒の小数点以下の数値のようだ.

Windows Essential 2012からこんなメッセージが届いた.

image

連絡なしにコンテンツをカスタマイズするって,それができるから怖いね!図に乗ってWLM本体にもFileManyを仕掛けてみよう.今度はあらかじめサイズを測定しておこう.サイズ:7.34 GB (7,886,336,211 バイト),ディスク上のサイズ:8.36 GB (8,986,787,840 バイト).⇒重複ファイル検査の結果が出た.

image

134801本のファイルを検査して29115種,67499個の重複ファイルが検出されている.純重複ファイル数は38384本,全体の28%が重複していたことになる.これは実感に近い数字だ.サイズ:5.01 GB (5,380,880,170 バイト),ディスク上のサイズ:5.82 GB (6,252,457,984 バイト)になった.ファイル数: 96,423、フォルダー数: 564.⇒相当な荒療治が終わったがALMを再起動して問題なく動作しているようだ.この状態でもう一度エクスポートしてみよう.

10.1インチ 2 in 1 ミニノートと9インチのWindows 10 タブレットを合体させる

かなりいい感じになってきた.

IMG_20200317_011327

画像左の10.1インチ 2 in 1 ミニノートがネットアクセス専用のフロントエンド,左は9インチのWindows 10 タブレット.タブレットはノートの補助画面として使われる.Mouse Without Borderでマウス・キーボード・トレーを共有しているのでほとんど一体化した一つのマシンとして扱うことができる.画面が小さいのでタッチ操作するのはスマホより大変だったが,マウスが使えるようになったので格段に楽になった.Chromeのズーム倍率も125%に設定した.

Gmailサーバーからのメール取り出しはパネルを出して止まっていた.

image

迷惑メールフォルダには283本メールが入っている.全体では未開封のメールが16,618本入ってきた.ヤフーメールも受信してみよう.⇒ダメだ.ログインできない.パスワードの控えもない.⇒ブラウザでYahooメールにアクセスしてパスワードの書き換えを実行→通らない.メール管理→IMAP/POP/SMTPアクセスとメール転送で設定を変更したがダメだ.⇒どうもこの「IMAP/POP/SMTPアクセスとメール転送」の設定がページ移動しただけでリセットされてしまっているように思われる.

この機能を利用するにはYahoo!ダイレクトオファーへの登録が必要となっている…登録済のように思われるのだが…⇒メールの設定画面の右上スクロールしないと見えない位置にに保存ボタンがあった.⇒動作するようになった.おかしい.トレーの共有が動作しなくなっている.

設定ではShare Clipboardになっているし,これまでは問題なく動作していたのだが…かなりおもしろくない…カスペルスキーはEドライブのスキャンを完了してルートキットスキャンというのを始めた.ルートキットというのは,システム内のマルウェアを隠蔽するプログラムでバックドアはその一部機能だ.まだ1%なのでこれも同等掛かりそうだ.Eドライブの検査では3,212,599個のファイルが検査されている.

修理に出していた 2 in 1 タブレットが戻ってきた.

修理に出していた 2 in 1 タブレットが日通航空便で戻ってきた.ようやくこれで本調子に戻れる.最初の作業はChromeの導入とカスペルスキーへの接続,次にWindows Update.これがかなり掛かりそうだ.それが終わったら Mouse without Borders の導入.Mouse without Borders が使えるようになると,マウスとキーボード,トレーの共有が可能になる.オフライン作業では開発機のマウス,オンライン時にはノートの無線マウスを共有することにする.オフラインと言っても契約切れ LTEの pocket WiFi ルータの廃物利用で繋がっている.これで開発機をネットに出さないという原則の履行が容易になった.ゼロトラストの時代にはこの程度のことはやらないと身を守れない.

サイトに投稿するためのHTMLエディタとしてWindows Live Writer も導入しなくてはならない.⇒MSサイトからダウンロードしたバージョンは以下のようなエラーが出てインストールできなかった. このエラーは結構あちこちで発生しているようだ.

image

http://web.archive.org/web/20170120121901/http://wl.dlservice.microsoft.com/download/F/A/D/FAD48A38-8F81-4DA1-8302-EFAB6FEC4A92/ja/wlsetup-all.exe

上記リンクのアーカイブからwlsetup-all.exeをダウンロード→インストールした.この中にはWindows Essentials 2012がまるごと入っている.ただし、Movie Makeer と Photo Galalley はインストールされなかった模様。Windows Live Messenger は入っている。※

※見落としていた.Movie Makeer と Photo Galalley,どちらもインストールされている.

Windows Live Writerのファイルはドキュメントに保存される.この場所を指定して変更できるとよいのだが,そのようなオプションは見当たらない.⇒バックアップを含めて2GBあるが,そっくり2in1にコピーしておこう.転送だけで約30分掛かるという表示が出ている.2in1(マシン名 BlackHawk)のCドライブの空き容量は10GBくらいしかないので無駄遣いはできないのだが…microSDが使えれば空き領域238GBあるので余裕なのだが…寝ている間に転送が止まっていた。ファイルが存在しないというエラーになっている。無視で終了してしまった。コピーではなく移動していたのかもしれない。

Google 日本語入力をダウンロードして導入した.Windows Live Mail も使えるようにしておこう.Windows Live Mail に蓄積されたファイルは現在5GBある.WLMは保存フォルダの切り替えができるのでmicroSDに置けるだろう.Windows Live WriterのファイルもmicroSDに移動し,ドキュメントフォルダには比較的最近のものだけを残すようにしてみよう.WLWにはDrafts 939本,Recent Postsに989本入っている.ドキュメントホルダーにはこのうち,2019年以降のものだけを残すようにした.これで7GBまで減っていたCドライブの容量は9GBまで回復した.(Cドライブは全体で27.8GBしかない)⇒食品の買い出しに行っている間に半分くらいは終わっているかと思ったが,「このファイルには移転できない属性を持っています」で止まっていた.再開したが,残り時間7時間半と出ている.

PCの方は明いているので作業を進めることにしよう.まだ,始業時バックアップも取っていない.XOOPS25に移植された10個のモジュールはすべて開けるようになっている.ただし,picoだけは画面が出ていない.警告は無数に出ているが一応動作可能な状態になっている.

何時間眠ったのか分からないが,転送は終わっていた.しかし,microSDのフォルダをWLMのフォルダに使うことができない.USBメモリも使えない.外付けHDなら使えるが,東芝のポータブルHDはUSB3.0でまったく認識できない.結局古い外付けHDを繋いで使うことにした.ここにメールデータのストックを送るのにまたかなり時間が掛かりそうだ.最初は残り5分と表示されていたのが1時間半になり,それでもあと30分に表示が変わったのでそのうち終わるだろう.外付けHDは3つのパーティションに区切られているが,そのうちの一つは10GBの空きがあるのでまだまだ使えるだろう.回転音が聞こえるというのも昔懐かしという趣だ.WiFi接続のHDの購入を予定していたが,この外付けを使い潰すというのでもよいのかもしれない.失敗した.フォルダをすべて閉じてしまったため,転送が中断してしまった.もう一度やり直すと,今度は残り時間2日以上になってまったく進まなくなってしまった.

image

フォルダのプロパティの数字もおかしい.元データは74,562本のファイルがあるはずなのにどちらにも5千個くらいしか入っていない.どうも埒が明かないのでHDをPCに戻して直接コピーすることにした.microSDのフォルダも削除することにしたが,ここには実際には74,561本のファイルが入っていた.PC上でのコピーは10分程度で完了する見込み.今日はなぜか1Lポットの沸騰音がやけに大きく聞こえる…Window Live Mail の起動に失敗した.

image

再起動していないのだが,この状態から抜けられない.

image

上と同じパネルを出して止まった.万事休す.普段はブラウザでGmailとYahooメールを直接読んでいるのだが,環境も整ったこともありWLMを使う本来のスタイルに戻そうと思ったのだが…そもそもカレンダーなどはこれまで一度も使っていないのだが…カレンダーというアプリ自体は問題なく動作している.WLMにはメールの他に,カレンダー,アドレス帳,フィード,ニュースグループ機能が入っている.このカレンダーとアプリのカレンダーが競合しているのではないだろうか?アドレス帳の中身は空になっている.PCでアドレス帳を開こうとすると,「知り合いが登録されていません.Windows Live から知り合いを参照するためには,Windows Live ID にサインインしてください.」というメッセージが出る.Window Live ID には多分サインインしたことはないと思うが…

アドレス帳が空になっているというのは気付かなかったが,復元されなくてはメール本文だけだから,それ以外の付属ファイルを全部削除してしまってもよい.上記のエラー:0x8E5E0458というのは以下のような意味だ.

RecordTooBigForBackwardCompatibility:record would be too big if represented in a database format from a previous version of Jet.

一番大きいのはMail.MSMessageStoreというファイルで410MBもある.これはどうもデータベース形式のファイルになっているのではないか?という気がする.バイナリファイルのようだ.このファイルを削除し,backup/newの中身も全部削除したが,状態は変わらない.

Windows メールのメッセージ ストアを再構築する方法
https://answers.microsoft.com/ja-jp/windows/forum/windows_vista-windows_programs/windows/926ed616-8874-e011-8dfc-68b599b31bf5

*.chk, *.log, *.sqmファイルをすべて削除した.calendarsというフォルダ(ほとんど空)その他,空のフォルダを削除,拡張子 jfm, jrs, xml およびアカウントデータ以外はすべて削除して立ち上がってきた.ちらっと「データベースを復旧しています」を表示したあと,下記を出して停止した.

image

カスペルスキーは走っているが,WLMをブロックした形跡はない.⇒「安全なアプリケーションだけを実行」はオフになっていた.通知アイコンに「ドライブエラーのスキャン」のような通知が入っていたのでクリックしたら外付けHDのスキャンが始まった.かなり大きな音がしたり,赤紫の点滅になったりとかなり不安を掻き立てるような動作が続いている.まだインジケータは青に戻っていない.カスペルスキーのパネルでは「スキャン実行中」のようなステータスにはなっていない.侵入されている可能性もあるような気がする.外付けHDが警告音を鳴らすというのはどういう場合なのだろう?このドライブはおそらく20年は使っていると思われるのでもはやお役御免とするべきなのかもしれない…IODATAの製品だ.

「ドライブエラーのスキャン」を表示したのはカスペルスキーだ.念のため外付けドライブのスキャンを済ませておこう.外付けドライブのスキャンではデフォルトでDドライブのmicroSDが対象となってしまうので,カスタムスキャンでG:をスキャンするようにした.かなり掛かるのではないかと思う. ⇒スリープに入ってしまったのでやり直しになってしまったが,そのあとの動作もおかしい.電源オフから立ち上げてもランプが点滅するだけで先に進まない.⇒結論的にこのHDはお役御免ということになった.20年以上働いてきたのだからもういいだろう.東芝ポータブルHDにこのドライブの全バックアップを取ったのはだいぶ前だ.

東芝ポータブルHDがミニノートに接続できればそれでよいのだが,東芝HDでは専用ケーブルでUSB3.0を出力するようになっている.ミニノートはカタログではUSB3.0コネクタを持っているが,あいにくミニなので変換ができない.ネットで探せば変換ケーブルがあるかも知れないが,少なくもヤマダにはない.いや,間違えていた.このミニノートのUSB3.0ポートはスクリーン左上の小さいコネクタと思っていたがそうではない.これは2.0のmicro Bだ.実際,ポータブルHDを接続して認識できた.⇒WLMの保存フォルダを変更→再起動で問題なく立ち上がってきた.これで使える準備はできたが,一度完全スキャンを掛けておこう.このドライブはWLMの5GBを移してもまだ25GBの空領域がある.※

※これまではUSB2.0と3.0の違いなどほとんど無頓着に来たがようやくどういうことになっているのかほぼ把握した.上記で東芝HDの専用ケーブルに付いている奇妙な形状のコネクタも独自パーツではなくちゃんとMicro USB3.0 Type-Bという規格に則ったものだ.

Download フォルダもカスタマイズできるのではなかったろうか?⇒Chromeで設定できる.これをE:Downloadsとして共有できるようにした.ただし,PC側のネットワークにBlackHawkが見えてこない.BlackHawkからはFireBirdは見えているのだが…ネットワーク検索でも見つけられない.Mouse Without Bordersでは接続できているのだが…

現在常用しているメールアカウントはGmailとYahooの2つだけだ.これらはどちらもWebメールでブラウザ上で送受信するようにしていたが,今後はWindows Live Mailで扱うようにしたい.WLMで扱うようにすると検索やバックアップも容易になるし,編集作業もブラウザでやるよりはずっと楽にできる.Yahooメールアカウントはバックアップデータの中にすでに入っているが,Gmailアカウントは入っていない.これはネットに復帰後の作業でGmailをIMAPで読み込むことに失敗していたためだ.

昔はWebメールアカウントはセキュリティ上もっとも脆弱なものでビジネスなどで使うのはもっての他という雰囲気だったが,世の中は変わった.いま,セキュリティ的にもっとも堅牢なのは Outlook や Gmail, YahooなどのWebメールだ.その分これらのサービスは非常に厳格なログイン基準を採用している.たとえばGmailやYahooメールなどでは二段階認証などが使われている.もっとも危ないのはそこいらのISPプロバイダーの提供する「普通の」メールアカウントだ.このような仕様変更のため,GmailやOutlookなどのメールをIMAPで読み取ることがとても難しくなっている.

Gmailの仕様変更でWindows Live Mailでログインが認めらなくなった場合
https://www.ikt-s.com/gmail_windows-live-mail/

解決策としては①Web上でブラウザを使ってアクセスする,②ThunderBirdなどセキュリティの高いメーラーを使う,③セキュリティの低いメーラーを使うオプションを選択するという3択しかない.我々はWLMをメーラとして使いたいので③の選択肢しかない.現状この選択はやむを得ないと思う.※

※ThunderBirdとデータ互換性があれば切り替えるというオプションもあり得るかも…⇒WLMからThunderBirdにエキスポート/インポートするのは難しくない.検討の余地はある.

Gmailの受信箱には3545本もメールが入っている.ある特定の文字列を検索→すべてのメールを検索しますか?にはいと答えたらこれらのメールをすべてサーバーから取り出しに行ったため下のパネルを出してほぼハング状態になってしまった.

image

XOOPS25に主要なモジュールをインストールした

本家XOOPSの最新版(以下XOOPS25)の環境に最新モジュールを導入して「新基盤」を構築するという作業を行っているところだ.すでにXPressMe(WordPress),picoの2モジュールは導入済みとなっているが,まだ走行時にエラーが発生している.いずれもPHPのバージョンの問題と考えられるが,相当広範囲で発生している模様で今のところ収束の見通しは立っていない.ともかく,やるっきゃないので進むことにしよう.

まず,始業時バックアップから.今日はXOOPS25,xampp7とも,まるごとバックアップを取っておくことにする.バックアップファイルのネーミングで日付が変わったものは新しい日付を当日日付としているが,宵越しのものは前日の日付に追番を付したものを使うことにしよう.つまり,始業時バックアップはつねに追番の付かない日付で表示される.(以前からそういうルールだったのだが,徹底していなかった)念のため,MySQLも取っておこう.

管理画面下部の状態表示ブロックはErros(2)で以下のエラーが表示されている.

Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; D3LanguageManager has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/class/D3LanguageManager.class.php line 3

Unknown: Non-static method D3LanguageManager::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/modules/pico/xoops_version.php line 8

ただし,これらは警告のようでだるまが出るようなFatal Errorではないので,このままもう少し進めることにする.まず,使われていたモジュールを可能な限り復元しておきたい.XOOPSサイトとGitHubから集めたモジュールは以下の8種(altsys, smartfaq, tellafriend, XPressMe, Pico, WebLinks, Evennew Mailer, Mantis Bug Tracker)でうち,altsys, XPressMeとpicoはインストール済み,それ以外のものも一度インストールに成功しているので多分簡単に片付くと思う.まず,これをやっておこう.一つづつ片付けてゆくことにする.

evennews ゼルコバ通信の発行に使っていたモジュール.インストールは問題なく完了したがモジュール画面でデータベースのQUERIESでエラーが起きている.

0.000613 – SELECT * FROM wp_blogs
Error number: 1146
Error message: Table ‘xoops25.zelkova_wp_blogs’ doesn’t exist

mantis バグレポート用モジュール.インストール画面→This Module Adminでだるまだ.

Error: Error: Call to undefined function split() in file /modules/mantis/core/timer_api.php line 46

https://www.marineroad.com/staff-blog/19442.html

「split関数」は PHP5.3.0 で非推奨となり、 PHP7.0.0 で削除されました。

ということのようだ.代替関数があるという.preg_split(),explode(),str_split().splitは正規表現を与えて文字列を分解するので,preg_splitを使うのが妥当と思われる.split()は以下のファイルに出現している.

1.\class\logger\render.php(193):
2.\modules\mantis\core\email_api.php(647, 661):
3.\modules\mantis\core\timer_api.php(46):
4.\modules\wordpress\wp-content\plugins\xpressme\include\xpress_common_functions.php(329, 346):
5.\modules\wordpress\wp-includes\class-wp-customize-manager.php(2069):
6.\modules\wordpress\wp-includes\media-template.php(34, 134, 1197, 1288):
7.\xoops_lib\modules\protector\library\HTMLPurifier\AttrDef\HTML\Class.php(14, 19):
8.\xoops_lib\modules\protector\library\HTMLPurifier\AttrDef\HTML\Nmtokens.php(24, 39):

ただし,protectorで使われているsplitはHTMLPurifier_AttrDef_HTML_Classクラスの関数で別物だ.また,logger, wordpressで使われているsplitも引数を一つしか持っていないので別物と思われる.mantis以外ではxpressmeのxpress_common_functions.phpで使われているが,これはとりあえず,パスしておこう.従って修正箇所はmantisの3箇所だけということになる.ダメだ.まだ通らない.

Error: Error: Call to undefined function mysql_escape_string() in file /modules/mantis/core/database_api.php line 292

この関数は上記の1箇所しか使われていない.しかし,mysqli_escape_stringという関数も使われた箇所がない.ともかくmysqli_escape_stringという関数名に変更してみよう.mysqli_escape_stringという関数は存在するが引数の個数が異なる.⇒どうも新しい関数ではDBへのリンクが必要になっているようだ.mysqli::escape_stringは使えるだろうか?ダメだ.この関数は動的関数なので静的な呼び出しはできない.以下のようにしてみたが無理なようだ.

$foo = new mysqli;
return $foo->escape_string( $p_string );

だるま→Error : Error: Call to undefined function mysql_result()
SYSTEM WARNING: mysqli::escape_string(): invalid object or resource mysqli

皆さんどうやってこれを切り抜けているのだろう?esc_sqlという関数があるみたいだ.ただし,これはWordPressの中だけの話かもしれない.やはり見つからない.wordpress本体ではesc_sqlを以下のように定義している.

function esc_sql( $data ) {
    global $wpdb;
    return $wpdb->_escape( $data );
}

mantisではDBにアクセスするときにはつねにホスト名使っているので,このようなグローバル変数を持っていないと思われる.mantisもdb_connectを持っているが,ブール値を返している.mantisはmysql_connectでDBに接続している.この関数もmysqli_connectに換えなくてはならないが,その戻り値をグローバル変数にいれておけばアクセスできるかもしれない.ここは一旦保留して次に進むことにする.smartfaq_masterを導入する.⇒再描画でエラーが出てしまった.picoがエラーを出している.

Fatal error: Cannot make static method MyTextSanitizer::getInstance() non static in class PicoTextSanitizer in D:\XoopsCore25\xoops_lib\modules\pico\class\pico.textsanitizer.php on line 14

これはあとで見ることにしてsmartfaqを導入しておこう.⇒インストール画面→This Module Adminでエラーになった.

Fatal error: require_once(): Failed opening required ‘D:/XoopsCore25/htdocs/modules/smartfaq/class/category.php’ (include_path=’C:\xampp7\php\PEAR’) in D:\XoopsCore25\htdocs\modules\smartfaq-master\class\faq.php on line 11

フォルダ名をsmartfaq_master→smartfaqに変えてこのエラーは一応収まったがどうも動作がいまいちだ.もう一度インストールし直してみる.smartfaqはアンインストールできたが,DBがまだ残っている.⇒MySQLで削除した.今度はうまく行った.SMARTFAQの管理画面にも入れる.TELL A FRIENDもインストールできた.weblinksはインストールできたが,happy_linuxが必要というメッセージが出ている.happy_linuxはXOOPS Xのサイトにはあったような気もするが,XOOPSのModule Repositoryには置いてない.

http://www.xoopscube.net/modules/xupdatemaster/index.php?action=StoreView&store_id=11

上記リンクからhappy_linux-master.zipをダウンロードした.⇒インストールできた.旧サイトで使っていたモジュールでXOOPS Xに残っているものがまだあるのではないだろうか?XOOPSからダウンロードできなかったものでXOOPS Xにあると思われるものには以下がある.

  • 1.bulletin
  • 2.cubeUtils
  • 3.d3forum 
  • 4.mobile_templates
  • 5.search
  • 6.hypconf 見つからない
  • 7.happy_linux 導入済み
  • XOOPS Xでも見つからないモジュールには以下がある.

  • 1.changemail 見つからない
  • 2.dbtheme
  • 3.download 見つからない
  • 4.extras 見つからない
  • 5.hdLegacy 見つからない
  • 6.iframe 見つからない
  • 7.legacyRender 見つからない
  • 8.resendmail 見つからない
  • 9.resetuname 見つからない
  • 10.stdCache 見つからない
  • 現時点でSYSTEMを含めて12個のモジュールがインストールされている.以下の6個のモジュールをネットからZIPでダウンロードしてある.bulletin, cubeUtils, d3forum, dbtheme, mobile_templates, search.しかし,これらのインストールは後回しにして現在導入済みのモジュールの動作確認を行い,データベースをリストアしてどこまで復元可能かを見ることにする.「Unknown: Methods with the same name as their class will not be constructors in a future version of PHP」や「Notice: Only variables should be assigned by reference in file」などの「警告」は当面無視することにする.Deprecated()も同様に無視される.

    ただし,Queries()の中で赤字で表示されるエラーについてはチェックを要する.とりあえず,モジュールの管理画面が開けるかどうかを個別に確認しておこう.

    SYSTEMS Errors(6), Dprecated(1), Queries(33)で以下のエラーが発生している.

    0.000291 – SELECT * FROM wp_blogs
    Error number: 1146
    Error message: Table ‘xoops25.zelkova_wp_blogs’ doesn’t exist

    WordPress関係のテーブルはすでに16個生成されている.またそれと別にprefixの付かないテーブルが12個ある.これらは何らかの理由で誤って作られているものである可能性がある.接頭辞が付かないテーブルというのは基本的に考えられないからだ.zelkova_wp_blogsが存在していないのはまだ作られていないためという可能性もある.WordPressの動作を見ておこう.

    WORDPRESS: Errors(25), Deprecated(5), Queries(41) ではエラーが2件起きている.一つは上と同じだが,もう一つある.

    0.000362 – SELECT mid FROM _modules WHERE `dirname` = ‘wordpress’
    Error number: 1146
    Error message: Table ‘xoops25._modules’ doesn’t exist

    zelkova_modulesは存在する.このエラーはかなり具合が悪い.一度バックアップを取ってから,これらのおかしなテーブルを破棄してみることにする.XOOPS25とMySQLだけバックアップし,併せてxoops25データベースのSQLを取っておこう.エクスポートでエラーが出ている.

    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 ”,
    )

    phpMyAdminの中では例外なく上記の仕様になっている.⇒いや,確かに指摘された位置では逆になっている.直してみよう.⇒確かに収まった.接頭辞の付いてないテーブルを独立にエクスポートしておく.テーブルの個数は101個に減少した.しかし,WPのクエリエラーは変わらない.XOOPS_DB_PREFIXが通っていないことが考えられるが,暫定的にwp-config.phpを書き換えていることが影響しているのだろうか?追いかけるのは止めて一通りチェックしてみよう.

    ALTSYSでダルマが出た.Error : Error: Call to undefined method XoopsTpl::XoopsTpl()というエラーが起きている.$XoopsTplという変数は頻繁に出現するが,XoopsTplというのはクラス名で,XoopsTpl()はそのコンストラクタだ.それが未定義というのはちょっと考え辛いのだが…

    Error: Error: Call to undefined method XoopsTpl::XoopsTpl() in file D:/XoopsCore25/xoops_lib/libs/altsys/class/D3Tpl.class.php line 9

    D3TplというのはXoopsTplの派生クラスでD3Tpl.class.php line 9というのはそのコンストラクタの中で呼び出しているparent::XoopsTpl() ;の行だ.PHPでは親のコンストラクタを明示的に呼出す必要があるのだろうか?XoopsTplはSmartyの派生クラスで,確かにXoopsTplという名前のコンストラクタは持っていない.C++の場合はクラス名が自動的にコンストラクタ名になるのだが,ここでは任意の名前を付けることができてしかもそれを派生クラスのコンストラクタから明示的に呼び出さなくてはならないということのようだ.XoopsTpl::__constructというのが,その名前だ.XoopsTpl() の出現は45箇所あるが,こういう呼び出し方をしているのはここだけだ.⇒一応このエラーは解消したものと思われるが,まだ後がある.

    error: ArgumentCountError: Too few arguments to function XoopsForm::__construct(), 0 passed in /class/xoopsform/form.php on line 141 and at least 3 expected in file /class/xoopsform/form.php line 122

    XoopsFormクラスにはXoopsFormという関数の他に__constructも定義されている.

    public function __construct($title, $name, $action, $method = ‘post’, $addtoken = false, $summary = ”)

    __constructの最初の引数3個にはデフォルト値がないので明示的に与えなくてはならない.しかし,XoopsFormは引数なしで呼び出されるのでどうすることもできない.これは,この関数XoopsFormの定義が間違っているとしか言いようがない.XoopsForm()は2箇所から呼び出されているがいずれも引数5個の呼び出しになっている.__constructの引数をそっくり持たせるようにした.⇒これでエラーは解消した.

    picoではエラーが発生する.

    Fatal error: Cannot make static method MyTextSanitizer::getInstance() non static in class PicoTextSanitizer in D:\XoopsCore25\xoops_lib\modules\pico\class\pico.textsanitizer.php on line 14

    WebLinkでも起きる.

    Fatal error: Cannot make static method happy_linux_locate_factory::getInstance() non static in class weblinks_locate_factory in D:\XoopsCore25\htdocs\modules\weblinks\class\weblinks_locate.php on line 64

    これら以外のモジュールでは少なくとも最初の画面を開くことはできる.PicoTextSanitizer はMyTextSanitizerの派生クラスで pico.textsanitizer.php on line 14 には以下の関数がある.

    function &getInstance()
    {
        static $instance;
        if (!isset($instance)) {
            $instance = new PicoTextSanitizer();
        }
        return $instance;
    }

    MyTextSanitizer::getInstance はstaticとして定義されている.

    public static function getInstance()
    {
        static $instance;
        if (!isset($instance)) {
            $instance = new MyTextSanitizer();
        }
        return $instance;
    }

    これはかなり混乱したコードだ.MyTextSanitizer::$instanceはstaticだからシステムに一つしかないはずだ.何をやろうとしているのかよくわからない.static function &getInstance のようにgetInstanceをstaticに指定してこのエラーは消えたが,画面が表示されていない.picoというタイトルが表示されているだけだ.

    image

    以下のようなWarningが出ているので,おそらくhtmlが生成されていないか紛失してしまっているのだろう.

    Warning: Smarty error: unable to read resource: “db:altsys_inc_mymenu.html” in file /class/smarty/Smarty.class.php line 1100

    weblinks_locate.phpの方も同種のエラーなので同じ修正を入れてみる.WebLinksでは簡単な画面が出た.

    XoopsCore25にWordPressをインストールできた

    龍司@RYUSさんという方からコメントが入っていた.発信は2020/03/12.このところメールをまったくチェックしていないので気付かなかった.この方はXOOPS Cubeを使ったシステム開発をやっている株式会社RYUSの代表者でXOOPS Cubeプロジェクトのトップランナーとも言うべき方だ.まだネットにアクセスできていた頃はうさでき(うさぎにもできるXOOPS Cube)というメールマガジンを購読していたが確かそことも接触があったはず.※

    ※XOOPSうさぎ通信の発行主体は株式会社RYUSだった.注文の多いXOOPS屋サイトの更新は2011/07/11で止まっている.

    コメント返ししたのはよいが,テント村を開いてもコメント欄がどこにも見当たらない.設定が非表示になっていればコメントを付けることもできないはずなので,どうなっているのか訳がわからず探しまくったところようやくアクセスの方法が分かった.WordPressのコメント欄には個別のページを開いた状態の場合しか見えないようになっている.ページを個別に開くためには記事のタイトルをクリックする必要がある!今の場合は,

    2020年3月11日 本家XOOPSの最新版が走るようになった! https://zelkova-tree.net/WordPress/2020/03/11/apache%e3%81%ae%e5%8b%95%e4%bd%9c%e3%81%8c%e3%81%8a%e3%81%8b%e3%81%97%e3%81%84-php-ini%e3%81%ae%e4%bf%ae%e6%ad%a3%e3%81%8c%e5%8f%8d%e6%98%a0%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84/

    picoとそれが参照しているaltsysの導入には失敗したが,XPressMe(WordPress)はインストールできた.XPressMeの動作はまだ確認していないが(エラーが発生している),エラーの規模は大きくないので多分収束できるのではないかと見ている.picoはマニュアル(オンラインヘルプ)を書くのに使っていたはずなので何とか復活させたいのだが,最悪の場合,記事だけをWordPressに移植することは不可能ではないと思われるので,一番肝心なところはWordPressが使えるようにするということではないかと思う.まず,バックアップを取ってから開始することにしよう.WordPressでは以下のようなエラーが発生している.

    Error: Call to undefined function mysql_get_server_info()

    mysql_get_server_infoという関数はPHP7では廃止されている.代替として,mysqli_get_server_infoを使えというサジェスチョンが出ている.XOOPS25のsecure.phpで define(‘XOOPS_DB_TYPE’, ‘mysql’); となっているところをmysqliに変えるとXOOPS25が立ち上がらなくなってしまう(だるまさんになる)ので,個別に対処するしかない.Meryで検索して以下の7件がヒットした.

    D:\XoopsCore25\htdocs\modules\system\js\code_mirror\tokenizephp.js(392):
    D:\XoopsCore25\htdocs\modules\wordpress\admin\index.php(175):
    D:\XoopsCore25\htdocs\modules\wordpress\admin\index.php(249):
    D:\XoopsCore25\htdocs\modules\wordpress\include\oninstall.php(92):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-admin\includes\class-wp-site-health.php(162):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(3621):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    念のためmysqli_get_server_infoも検索してみると,11件がヒットしている.

    D:\XoopsCore25\htdocs\class\database\mysqldatabase.php(463):
    D:\XoopsCore25\htdocs\class\model\sync.php(69):
    D:\XoopsCore25\htdocs\Frameworks\art\functions.php(48):
    D:\XoopsCore25\htdocs\Frameworks\art\object.php(91):
    D:\XoopsCore25\htdocs\modules\system\js\code_mirror\tokenizephp.js(410):
    D:\XoopsCore25\htdocs\modules\system\themes\default\default.php(74):
    D:\XoopsCore25\htdocs\modules\system\themes\transition\transition.php(108):
    D:\XoopsCore25\htdocs\modules\system\themes\zetadigme\zetadigme.php(115):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-admin\includes\class-wp-site-health.php(159):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(3619):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    ファイルごとに比較しておこう.左がmysql_get_server_infoの出現,右がmysqli_get_server_infoだ.

    tokenizephp.js(392) ― tokenizephp.js(410)
    index.php(175, 249): ― 
    oninstall.php(92) ― 
    class-wp-site-health.php(162) ― class-wp-site-health.php(159)
    wp-db.php(3621) ― wp-db.php(3619)
    codemirror.min.js(27) ― codemirror.min.js(27)
    ― mysqldatabase.php(463),sync.php(69),functions.php(48),object.php(91),default.php(74),transition.php(108),zetadigme.php(115)

    これで見ると,おそらく修正を要するのはindex.php(175, 249)とoninstall.php(92)だけではないかと思われる.これらを修正したが,まだエラーは発生している.

    Warning: Use of undefined constant XOOPS_PATH – assumed ‘XOOPS_PATH’ (this will throw an Error in a future version of PHP) in D:\XoopsCore25\htdocs\modules\wordpress\class\config_from_xoops.class.php(56) : eval()’d code on line 1

    データベース接続確立エラー

    XOOPS_PATHは以下の13箇所で参照されている.

    D:\XoopsCore25\htdocs\admin.php(68):
    D:\XoopsCore25\htdocs\admin.php(69):
    D:\XoopsCore25\htdocs\image.php(248):
    D:\XoopsCore25\htdocs\mainfile.dist.php(26):
    D:\XoopsCore25\htdocs\mainfile.dist.php(29):
    D:\XoopsCore25\htdocs\mainfile.dist.php(30):
    D:\XoopsCore25\htdocs\mainfile.php(26):
    D:\XoopsCore25\htdocs\mainfile.php(29):
    D:\XoopsCore25\htdocs\mainfile.php(30):
    D:\XoopsCore25\htdocs\class\xoopskernel.php(35):
    D:\XoopsCore25\htdocs\class\xoopskernel.php(38):
    D:\XoopsCore25\htdocs\class\logger\xoopslogger.php(202):
    D:\XoopsCore25\htdocs\class\smarty\xoops_plugins\modifier.truncateHtml.php(33):

    いや,おかしい.XOOPS_PATHはmainfile.phpで定義されている.上記config_from_xoops.class.php(56) の56行というのは下記関数でevalを呼び出しているところに該当する.

    function xpress_eval($str){
        $eval_str = ‘$ret = ‘ . $str . ‘ ;’;
        eval($eval_str);
        return $ret;
    }

    Debug mode がいつの間にかオフになっていた.
    Error : Error: Call to undefined function mysqil_get_server_info()

    どこかでミスタイプしたのだろうか?mysqliがmysqilになっている.⇒index.phpでミスっていた.⇒これを修正してほぼ動作するようになったが,まだModules→WordPress blog→WordPress Adminでエラーが起きている.

    Warning: Use of undefined constant XOOPS_PATH – assumed ‘XOOPS_PATH’ (this will throw an Error in a future version of PHP) in D:\XoopsCore25\htdocs\modules\wordpress\class\config_from_xoops.class.php(56) : eval()’d code on line 1
    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php:17 Stack trace: #0 D:\XoopsCore25\htdocs\modules\wordpress\include\add_xpress_process.php(202): xpress_set_memory_limmit() #1 D:\XoopsCore25\htdocs\modules\wordpress\wp-config.php(85): require_once(‘D:\\XoopsCore25\\…’) #2 D:\XoopsCore25\htdocs\modules\wordpress\wp-load.php(37): require_once(‘D:\\XoopsCore25\\…’) #3 D:\XoopsCore25\htdocs\modules\wordpress\wp-admin\admin.php(34): require_once(‘D:\\XoopsCore25\\…’) #4 D:\XoopsCore25\htdocs\modules\wordpress\wp-admin\index.php(10): require_once(‘D:\\XoopsCore25\\…’) #5 {main} thrown in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php on line 17

    mysql_connectという関数が未定義というエラーだ.Updateは可能なようだが,もっと新しいバージョンがあるだろうか?WPの現在のバージョンは5.3.2だ.⇒やってみれば分かるだろう.⇒Updateされた.Versionは2.36.これはXPressMeのバージョンのことではないだろうか?動作は同じだ.memory_limit.phpでエラーが発生しているようだが,スタックオーバーフローでなければよいが…mysql_connectという関数もPHP7では使えなくなっている.以下の11箇所で参照されている.

    D:\XoopsCore25\htdocs\modules\system\class\thumbs\phpThumb.php(328):
    D:\XoopsCore25\htdocs\modules\system\class\thumbs\phpThumb.php(329):
    D:\XoopsCore25\htdocs\modules\system\class\thumbs\phpThumb.php(338):
    D:\XoopsCore25\htdocs\modules\system\js\code_mirror\tokenizephp.js(379):
    D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php(17):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(783):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(1654):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(1665):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(1668):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(1728):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    mysqli_connectの出現も見ておこう.⇒7件あった.

    D:\XoopsCore25\htdocs\install_remove_17115613625e6a78cfd2306\page_dbsettings.php(37):
    D:\XoopsCore25\htdocs\install_remove_17115613625e6a78cfd2306\page_modcheck.php(62):
    D:\XoopsCore25\htdocs\modules\system\class\thumbs\phpThumb.php(291):
    D:\XoopsCore25\htdocs\modules\system\js\code_mirror\tokenizephp.js(398):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-admin\includes\class-wp-site-health.php(851):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(614):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    mysql_connectとmysqli_connectの出現位置を比較してみる.

    phpThumb.php(328, 329, 338) ― phpThumb.php(291):
    tokenizephp.js(379) ―  tokenizephp.js(398)
    memory_limit.php(17) ― 
    wp-db.php(783, 1654, 1665, 1668, 1728,) ― wp-db.php(614)
    codemirror.min.js(27) ― codemirror.min.js(27)
    ― page_dbsettings.php(37),page_modcheck.php(62),class-wp-site-health.php(851)

    上記エラーの直接の原因はmemory_limit.php(17)だが,wp-db.phpにも5箇所の出現がある.しかし,このファイルにはmysqli_connectを呼び出している箇所もあるので,様子を見ることにしよう.⇒対処したが,別のエラーが出てきた.今度はmysql_closeだ.今後はWordPressの中だけをチェックすることにする.というか,WordPressでmysqliの使用を強制するということはできないのだろうか?WPのSystem informationではMySQL Versionは不明となっている.WP内におけるmysql_closeの出現は以下の3箇所だ.

    D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php(59):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(3477):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    一方,mysqli_closeは以下の2箇所に出現している.

    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\wp-db.php(3475):
    D:\XoopsCore25\htdocs\modules\wordpress\wp-includes\js\codemirror\codemirror.min.js(27):

    memory_limit.php(59)だけを修正しておこう.⇒これでCall to undefined functionエラーは解消したが,データベースには接続できていない.多分それとは独立に警告3件が発生している.

    Warning: Use of undefined constant XOOPS_PATH – assumed ‘XOOPS_PATH’ (this will throw an Error in a future version of PHP) in D:\XoopsCore25\htdocs\modules\wordpress\class\config_from_xoops.class.php(56) : eval()’d code on line 1
    Warning: mysqli_connect(): (HY000/1045): Access denied for user ”@’localhost’ (using password: NO) in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php on line 18
    Warning: mysqli_close() expects parameter 1 to be mysqli, bool given in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php on line 60

    データベース接続確立エラー

    これは、wp-config.php ファイルのユーザー名とパスワードが正しくないか、あるいは のデータベースサーバーに接続できないかのどちらかを意味します。ホスティングサービスのデータベースサーバーがダウンしているかもしれません。ユーザー名とパスワードに間違いはありませんか ? 正しいホスト名を入力しましたか ? データベースサーバーは稼働していますか ?

    wp-config.phpを見てみよう.このファイルではすべてのデータベース設定を$xoops_configから取り出している.WPのSystem information→Set value that XPressME acquired from XOOPSを見ると,XOOPS setting valueは正しく表示されているが,xoops_config get valueはXOOPS_ROOT_PATH, XOOPS_TRUST_PATH, XOOPS_URL以外についてはすべて空欄になっている.この中にはXOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS, XOOPS_DB_NAME, XOOPS_DB_PREFIXが含まれる.

    おかしい.開発機からネットに接続できなくなってしまった.WiFiルータは接続済になっているのだが…⇒切断→再接続で復活した.$xoops_configというのはWordPress内で通用している変数だ.暫定的にwp-config.phpの中で固定値を設定するようにしてみよう.動き初めた.XPressMeのデータベース名はXOOPSのデータベース名と一致している必要があるようだ.以下の警告が出ている.

    Warning: Use of undefined constant XOOPS_PATH – assumed ‘XOOPS_PATH’ (this will throw an Error in a future version of PHP) in D:\XoopsCore25\htdocs\modules\wordpress\class\config_from_xoops.class.php(56) : eval()’d code on line 1
    Warning: mysqli_connect(): (HY000/1045): Access denied for user ”@’localhost’ (using password: NO) in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php on line 18
    Warning: mysqli_close() expects parameter 1 to be mysqli, bool given in D:\XoopsCore25\htdocs\modules\wordpress\include\memory_limit.php on line 60

    image

    この画面は「WordPressをインストール」となっている.もう一度インストールする必要があるのだろうか?ともかくWordPressのダッシュボードが開いた.⇒新規投稿でエラーが出てしまった.かなり幸先が悪い出発だ.3つの警告の上にParse errorが出ている.

    Parse error: syntax error, unexpected ‘&’, expecting ‘)’ in D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_render.php on line 37

    テーマのカスタマイズなどでも同様のエラーが発生する.これを解決できなかったら使い物にならない…37行目の内容は

    $ans = mb_convert_variables(‘UTF-8’ , ‘EUC-JP’, &$xml_data); //EUC-JP to UTF-8

    mb_convert_variablesは第3引数のテキストなどを第1引数のエンコードに変換するものだ.

    mb_convert_variables ( string $to_encoding , mixed $from_encoding , mixed &$vars [, mixed &$... ] ) : string

    しかし,上のエラーメッセージを見ると

    mb_convert_variables ( string $to_encoding , mixed &$vars [, mixed &$... ] ) : string

    のような仕様になっていることを想定しているように思われる.しかし,そのような変種は見当たらない.このエラーもPHPのバージョンに関係しているようだ.暫定的にこの呼び出しを止めておくことにしよう.(XOOPS25の環境では入出力のすべてでUTF-8が使われているからコード変換は不要と仮定する)mb_convert_variablesは以下の4箇所で使われている.

    D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_header.php(37):
    D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_header.php(39):
    D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_render.php(37):
    D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_render.php(39):

    4箇所をすべてコメントアウトしてこのエラーは解消したが,まだエラーは続く.

    Parse error: syntax error, unexpected ‘new’ (T_NEW) in D:\XoopsCore25\htdocs\modules\wordpress\include\xpress_block_render.php on line 174

    174行目は

    $tpl =& new XoopsTpl() ;

    となっている.参照の&を外したらエラーは解消したが,まだ出てくる.

    Parse error: syntax error, unexpected ‘new’ (T_NEW) in D:\XoopsCore25\htdocs\modules\wordpress\include\xml.php on line 18

    xml.phpの18行目は

    $xml_parser = &new xpress_XML();

    となっているので,上と同様&を取り除いたら動作するようになった.警告は出ているが,ブロックエディタ画面に入れた.

    image

    これらのエラーについては以下に説明がある.

    下位互換性のない変更点→下位互換性のないその他の変更
    https://www.php.net/manual/ja/migration70.incompatible.php

    新しいオブジェクトを参照渡しで代入できない
    new 文の結果を参照渡しで変数に代入することができなくなりました。

    従って,PHP7では「&new」はすべて構文エラーになると考えられる.検索するとJSを除外して,4ファイル見つかった.

    D:\XoopsCore25\htdocs\modules\wordpress\include\xml.php(18):
    D:\XoopsCore25\xoops_lib\libs\altsys\include\Text_Diff.php(38, 40, 59, 282. …,840):
    D:\XoopsCore25\xoops_lib\libs\altsys\include\Text_Diff_Renderer.php(86. 102):
    D:\XoopsCore25\xoops_lib\libs\altsys\include\Text_Diff_Renderer_inline.php(119, 123):

    修正しておこう.Text_Diff.phpは個数が多いのでファイルのバックアップを取って一括変換しておく.警告は山のように出ているが,エラーは発生しなくなったようだ.警告に関しては後日調べることにして,一旦デバッグモードを止めて動作をチェックしてみよう.⇒XOOPSのデバッグモードを止めてもWordPressの警告は止まらない.

    「XPressME Integration Kit Version 2.54 が利用可能です」という通知が入っているのでUpdateしてみよう.⇒以下のリンクで403エラーになった.

    http://ja.xpressme.info/wp-content/plugins/download-monitor/download.php?id=142

    WordPressの設定では特にデバッグモードというのは見当たらなかった.XOOPSでデバッグモードをSmartyに変えてもWordPressのエラー表示は変化しない.新規投稿→公開でエラーになった.

    公開に失敗しました。 エラーメッセージ: 返答が正しい JSON レスポンスではありません。

    非公開で投稿でも同じエラーになる.また,パスワード保護というオプションが選択できない.⇒非公開で保存されているようだ.エラーは出ているがXOOPSのトップページに表示されている.いや,XOOPSのトップではなくWordPressのトップページだ.しかし,メニュー類はXOOPSのものが出ている.テーマを切り替えても画面がまったく変化しない.WordPressのバージョンは5.3.2だが,これは古いのか新しいのか?ロリポ!で提供しているWordPressのバージョンも5.3.2だから最新と考えてよい.ロリポ!のブログには以下のプラグインが導入されている.○は現在使用中のもの

    1. Akismet Anti-Spam ○
    2. Classic Editor ○
    3. Count Per Day ○
    4. Hello Dolly
    5. SiteGuard WP Plugin ○
    6. WP Multibyte Patch ○

    wp-config.php 等の定義ファイルにおいて WP_DEBUG 定数を真と定義することにより、WordPress を「デバッグモード」で動作させることができます。

    とあったので,wp-config.phpで明示的に偽に設定してみたが,動作には変化なかった.XPressMeではブログ管理人の写真はアップしていないが,WordPressは覚えているようで,画面上部の「こんにちは,babalaboさん」には顔写真が出てくる.しかし,どうやって突き合わせているのだろう?ユーザ名は同じだが,パスワードは異なるものを使っている.メールアドレスで判定しているのだろうか?ロリポップのPHPは7.3(モジュール版),こちらのxampp7のPHPは7.4.2だ.この差が現れているのだろうか?だとすれば,xampp7のPHPが新し過ぎるということになるのだが…PHP7.3を導入して動作をチェックしてみたい…一応WordPressは動くようになったので一度バックアップを取って先に進むことにしよう.

    XoopsCore25とMySQL→xoops25だけをバックアップしておくことにする.⇒おかしい.またエクスポートに失敗している.いや,多分これはmax_sizeの問題だろう.WordPressでは確か,MAXを512MBとしていたような気がするので,PHP.iniで3つの定数をすべて400MBに設定しておくことにする.WordPressではなく,memory_limitが512MBだ.これにupload_max_filesizeとpost_max_sizeを合わせることにしよう.ダメだ.まだ保存できない.何か他にやることがあったろうか?⇒dbのインデックス不整合というエラーが出たので,mysql→dbテーブルの修復を実行した.

    以前にもエキスポートでエラーが出ているが,そのときにはエラーメッセージがHTML形式で表示されている.どこでどのようにしたらエラーが表示できるようになるのだろう?これはMySQLの動作なのでXOOPSのデバッグモードは関係ないはずだ.このログではUtil.phpの1617行目の書き換えを実施している.⇒エクスポートできるようになった.

    685KBであまり大きなファイルではない.さて,atlsysが残っているのだが,どうしたものだろう?PHPエラーもある程度飲み込めたのでもう一度チャレンジしてみたい.libs/atlsysの中のPHPにも修正が入っているので今度は通る可能性がある.⇒だめだ.

    Error : ParseError: syntax error, unexpected ‘new’ (T_NEW)

    だるまが出てしまうのでエラーの詳細が分からない.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

    FILTER_SANITIZE_MAGIC_QUOTES が使われているのはこの場所だけだ.この修正でErrors(0)になったが,atlsysのインストールでだるまになる状況は変わらない. /xoops_trust_path/libs/altsys/include/altsys_functions.phpをextras/のファイルからオリジナルに戻してみた.インストールすると以下のエラーが出る.

    Error: ParseError: syntax error, unexpected ‘new’ (T_NEW) in file D:/XoopsCore25/xoops_lib/libs/altsys/oninstall.php line 39

    oninstall.phpの39行目は

    $sqlutil =& new OldSqlUtility ;

    となっている.これは上記の「新しいオブジェクトを参照渡しで代入できない」という話の続きだろう.このような表記はほとんどlig/altsys内の関数だが,wordpressが2件,protectorが3件ある.全25箇所.この際だから片付けておくことにしよう.⇒!やった!altsysがインストールできた.これでpicoもインストールできるかもしれない.⇒altsysのインストールには成功しているが,そのあと管理画面に戻るところでだるまになり,大量のエラーが発生.

    Errors

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; AltsysBreadcrumbs has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/class/AltsysBreadcrumbs.class.php line 4

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/index.php line 7

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/index.php line 8

    Unknown: Non-static method AltsysBreadcrumbs::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/libs/altsys/index.php line 14

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/index.php line 28

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; XoopsGTicket has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/include/gtickets.php line 7

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; MyXoopsGroupPermForm has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/include/mygrouppermform.php line 49

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; MyXoopsGroupFormCheckBox has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/include/mygrouppermform.php line 224

    Warning: Use of undefined constant ALTSYS_CORE_TYPE_XCL21 – assumed ‘ALTSYS_CORE_TYPE_XCL21’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/myblocksadmin.php line 24

    Warning: Use of undefined constant ALTSYS_CORE_TYPE_ICMS – assumed ‘ALTSYS_CORE_TYPE_ICMS’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/myblocksadmin.php line 28

    Unknown: Non-static method MyBlocksAdminForX20S::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/libs/altsys/myblocksadmin.php line 35

    Unknown: Non-static method Database::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 23

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 23

    Warning: Use of undefined constant _AM_SBLEFT – assumed ‘_AM_SBLEFT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 21

    Warning: Use of undefined constant _AM_SBRIGHT – assumed ‘_AM_SBRIGHT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 22

    Warning: Use of undefined constant _AM_CBLEFT – assumed ‘_AM_CBLEFT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 23

    Warning: Use of undefined constant _AM_CBRIGHT – assumed ‘_AM_CBRIGHT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 24

    Warning: Use of undefined constant _AM_CBCENTER – assumed ‘_AM_CBCENTER’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 25

    Warning: Use of undefined constant _AM_CBBOTTOMLEFT – assumed ‘_AM_CBBOTTOMLEFT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 26

    Warning: Use of undefined constant _AM_CBBOTTOMRIGHT – assumed ‘_AM_CBBOTTOMRIGHT’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 27

    Warning: Use of undefined constant _AM_CBBOTTOM – assumed ‘_AM_CBBOTTOM’ (this will throw an Error in a future version of PHP) in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdminForX20S.class.php line 28

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 73

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 74

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 75

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 85

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 88

    Unknown: Non-static method AltsysBreadcrumbs::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/libs/altsys/class/MyBlocksAdmin.class.php line 98

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; D3Tpl has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/class/D3Tpl.class.php line 6

    Error: Error: Call to undefined method XoopsTpl::XoopsTpl() in file D:/XoopsCore25/xoops_lib/libs/altsys/class/D3Tpl.class.php line 9

    最後のエラーを見てみよう.D3Tpl.class.php line 9は

    parent::XoopsTpl() ;

    & newがまだ残っていた.なぜだろう?picoで追加されたものだ.一部はすでに修正されたものもあるが,全124箇所あった.⇒すべて書き換えた.⇒picoのインストールに成功した.しかし,管理画面に戻るところでFatal Errorが出た.

    Fatal error: Cannot make static method MyTextSanitizer::getInstance() non static in class PicoTextSanitizer in D:\XoopsCore25\xoops_lib\modules\pico\class\pico.textsanitizer.php on line 14

    これを含めてエラーは13個発生している.pico.textsanitizer.php on line 14 は関数名の部分で,この関数は上位クラスのMyTextSanitizer値を返している.

    function PicoTextSanitizer()
    {
        parent::MyTextSanitizer() ;
    }

    一応上記の修正でpicoはインストールされて,インストール済モジュールは7個になったが,altsysにはMenuというところで❌が付いている.これはどういうことだろう?❌をクリックしたら☑」に戻った.SUBMITボタンを押して,以下のエラーが出ている.

    Unknown: Methods with the same name as their class will not be constructors in a future version of PHP; D3LanguageManager has a deprecated constructor in file D:/XoopsCore25/xoops_lib/libs/altsys/class/D3LanguageManager.class.php line 3

    Unknown: Non-static method D3LanguageManager::getInstance() should not be called statically in file D:/XoopsCore25/xoops_lib/modules/pico/xoops_version.php line 7

    これらのエラーはXOOPSで構築されたサイトでは恒例のようになっている.

    pico/xoops_version.php line 7は

    $langman =& D3LanguageManager::getInstance() ;

    これは「非 static メソッドに対する static 呼び出し」禁止という規則だ.今の場合,getInstanceが非静的メソッド,D3LanguageManagerはクラス名なのでD3LanguageManager::getInstance() は静的呼び出しになる.

    picoモジュールのインストールは失敗,WordPressも難しい

    Windows Live Writer の編集画面のレイアウトがまた変わってしまっている.両側に余白のあるレイアウトだ.この状態では段落のスタイルを「リスト」にした場合,段落番号が欄外にはみ出して隠されてしまうため,とても編集しづらくなる.デフォルトフォントもMeiryo UI 11ポイントからいつの間にかメイリオ 9.6に変わってしまっている.デフォルトフォントを設定するメニューが見つからないので現状では変更することができない.これまでの作業で少なくとも2つのポイントをクリアすることができた.

    1. xamppの古いバージョンの環境でXOOPS Cube(旧ユーザ会サイトイメージ)の復元に成功
    2. xampp7(xamppの最新版)の環境でXoopsCore25(本家XOOPSの最新版)のインストールに成功(XOOPS Cube から XOOPS X への移行は断念)

    次の課題はxampp7の環境上で動作しているXoopsCore25に旧XOOPSのDBを移植して稼働させることだ.通常XOOPSではモジュールのアップデートを旧環境の上で実施してしだいに新しいバージョンに適合させてゆくという手順になるが,xamppの古いバージョンの上に新しいモジュールを移植するというのはかなり難しく,ほとんどの場合PHPを直接デバッグしないと先に進めないような状況になってしまうため,ここでは採用することができない.可能な唯一の道としては,XoopsCore25に新しいモジュールを追加した「新基盤」を構築した上に古いDBデータを注入するというステップしかない.XoopsCore25と新しいモジュールは親和性があるから,「新基盤」を構築するのはそれほど難しくないと考えられる.

    この「新基盤」はxampp7で稼働しているものだから,PHP7を搭載した外部サーバー上でそのまま動かすことができる.新基盤は言わば空っぽのXOOPSシステムでありその上に旧DBデータを移植しなくてはならないが,DBデータ自体はテキストデータなのでその内部構造が分かれば通常のテキストエディタで編集することが可能だ.つまり,この作業は難易度はともかくとして実施可能な作業であると考える.てか,これしか道はない.ということで昨日の続きに掛かることにしよう.旧XOOPSと新XOOPSではxoops_trust_pathの構成が異なる.このため昨日は pico モジュールのインストールのところでつまずいてしまった.一旦内部構成が壊れると復元はなかなか困難なのでもう一度バックアップに戻ってやり直すことにする.

    データベースに保管されたデータはxamppの中に含まれるのでxampp自体をバックアップに戻さなくてはならない.xampp7 2020-03-11に戻ってみよう.XOOPS25の方はXoopsCore25 2020-03-11-1に戻しておく.⇒ダメだ.localhostでエラーが起きてしまう.

    image

    だるまさんが転んでしまった!クッキーを削除しても動作は変わらない.DocumentRootはD:/XoopsCore25/htdocsになっている.XAMPPはアプリ登録されているので一度アンインストールした方がよいのかもしれない.その前に,C:/xampp7/htdocsを開いて状態を見ることにする.⇒動作的には問題ないようだ.従って,XoopsCore25 2020-03-11-1に問題があると考えられる.あとはXoopsCore25 2020-03-11しかない.この版はおそらくXoopsCore25のインストールに成功した最初のバージョンだ.⇒ここでもエラーが起きている!訳が分からなくなってきた.index.htmlすら開けない状態になっている.あり得ない!

    image

    やはり,xampp7を一度アンインストールするのが正解かもしれない.xamppのインストーラはPHPなのでまず,xamppをブラウザからアクセスできるようにしなくてはならない.いや,そんなことはやった記憶がない…install.phpではなく,setup_xampp.batを使ってみよう.⇒エラーが出る.

    Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp7\install\install.php on line 311
    Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp7\install\install.php on line 312
    Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp7\install\install.php on line 313

    このxamppはxampp-windows-x64-7.4.2-0-VC15-installer.exeによってインストールしたものだ.xampp7\install\install.phpを実行するためにはApacheが走っていなくてはならないが,そのためにはxamppをインストールしなくてはならない…旧バージョンのxamppはインストーラではなかったのでsetup_xamppだけで使っていたはずだ.⇒状態を戻すためにはこのインストーラで最初からやり直すしかないのではないだろうか?そうなると,XOOPS25の方もインストールからやり直すしかなくなる.なぜならXOOPS25のすべての設定はMySQLに入っているからだ.仕方ない.そうするしかないと思う.⇒インストールした.Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.2.

    XOOPSの方はXoopsCore25-2.5.10だ.これは配置してlocalhostでhtdocsにアクセスすると自動的にインストール・ウィザードが開始される.上と同じエラーが発生した.XOOPS25はネットに接続していないとエラーになるのだろうか?いや,違うのではないか?

    Error: Unable to connect to database

    というエラーが起きている.そもそもmainfile.phpが入っていない.⇒いや,そういう仕様だったような気がする.インストール・ウィザードを実行したあとでmainfile.phpが作られていたと思う.いや,どうもおかしい.index.htmlは存在しないのにhttp://localhost/index.htmlでhtmlが表示されている.ApacheのDocumentRoot は “D:/XoopsCore25/htdocs” を指している.しかし,xampp7のコントロールパネル:MySQL⇒AdminでphpMyAdminが開かない.xampp7/htdocs/をlocalhostにしてXamppのダッシュボードからphpMyAdminメニューを実行すれば開くことができる.phpMyAdminはhtdocsの下ではなく,xampp7の直下にある.これをhtdocsの下にコピーして使っていたのではなかったろうか?⇒やってみよう.

    ダメだ.mysqlの下に置いても同じ.これはかなり不都合だ.なぜだろう?急に動くようになった.どうも訳が分からない.xamppのコントロールパネルからphpMyAdminにアクセスすることはできるようになった.これはlocalhostをXoopsCore25/htdocsに切り替えても変化しない.ただし,ApacheのAdminボタンでlocalhostにアクセスするとエラーになる状態は変わらない.いや,このXoosCore25自体内容的におかしい.XoosCore25は本来xoops_trust_pathを持っていないはずなのにすでに作られている.何か間違ったものをコピーしてしまったような気がする.⇒コピーし直し⇒動作するようになった.Select your languageが出るようになった.ここでは英語しか選択できない.どうせやり直しをするのだから,日本語パックを導入してみよう.

    いや,まだ何か動作がおかしい.未インストールの状態ではindex.htmlを指定しても強制的にinstall/index.phpにリダイレクトされてしまうようだ.またこのフォルダにはlanguageというフォルダがあるので,ここにjapaneseを入れてやる必要がある.いや,どうもそれも違うような気がする.japaneseの下にあるのはmodulesとcoreだが,modulesの中身は明らかにモジュールでインストールには関係ない.coreの中身はバージョンごとに分かれていて,最新の2.5.0ではutf-8→htdocs→language→japanese→でその下にあるのはhtdocsに置かれるようなファイルだけだ.これに対しinstall/languageの下にあるenglishにはinstall.phpやmysql.lang.data.sqlなどが入っている.これらはjapaneseの中には入っていない.

    多分このフォルダをinstall/languageに配置しても意味ないと思われるが,一応やってみよう.一応言語の選択肢としてはjapaneseが出てきた.しかし,(当然ながら)言語が切り替わるという訳ではない.

    Wrote XOOPS GPL License Key: ef06fa-31e233-4bca29-ed010f-766d7e

    管理画面などはデフォルトテーマの方が慣れているのでそちらを使うことにする.

    The mainfile.php is readonly.
    Remove the folder install_remove_11267332765e6a42086dfde (or install if it was not renamed automatically by the installer) from your server.

    動作がおかしい.Administration MenuとViewAcountで「制限されたアクセス」になってページを開くことができない.EditProfileは開ける.グループはWebmasters, Registered Usersになっている.テーマはxbootstrapで切り替えることができない.logoutでも「制限されたアクセス」になってしまう.別の場所からはログアウトできた.ログインしようとしただけで「制限されたアクセス」が起きる.どうも日本語を導入しようとしたのが失敗だったのではないだろうか?もう一度やり直すしかないと思う.⇒今度はApacheが起動できなくなってしまった.Apacheのエラーログには以下の警告が記載されている.

    PHP Warning:  PHP Startup: Unable to load dynamic library ‘pdo_sqlite’ (tried: C:\\xampp7\\php\\ext\\pdo_sqlite (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82), C:\\xampp7\\php\\ext\\php_pdo_sqlite.dll (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82)) in Unknown on line 0

    xampp側は何も操作していないつもりなのだが…フォルダの外装を剥いでなかった!つまり,フォルダの中にもう一つフォルダがあった.これでは動かない…

    Wrote XOOPS GPL License Key: ef06fa-31e233-4bca29-ace847-3a4a17

    今度はすべて動作するようになった.さて,ようやくモジュールのインストールに掛かれる.前回失敗したpicoから始めることにしよう.picoは2つフォルダを持っている.htmlとxoops_trust_pathだ.htmlの方はXoopsCore25のhtdocsに放り込むだけだが,xoops_trust_pathの配置が問題だ.XoopsCore25にはxoops_trust_pathを作ってあるので,そこに投げ込むだけでよいと思ったのだが,うまく行かなかった.その理由を調べなくてはならない.xoops_trust_pathにはmodulesとPEARという2つのフォルダが入っている.実際のxoops_trust_pathのフォルダはxoops_dataとxoops_libに分かれている.xoops_dataにはcaches, configs, data, protectorの4つのフォルダが入っている.xoops_libにはFrameworksとmodulesがある.一致する部分はmodulesだけなのでこの階層にコピーするのが正しいように思われるが,もう一つのPEARというのがよく分からない.PEARの下は

    PEAR/text/Wiki/Parse/Default
                  /Render

    のような構成になっているが,中にはPHPが入っているのでxoops_dataに属するものではないように思われる.と考えると,実装のxoops_libがパッケージのxoops_trust_pathに該当すると見てよいのではないだろうか?まず,その線で試してみよう.⇒配置はこれでよいと思うのだが,This Module Admin→Install module(1)をクリックすると「install the latest altsys」というテキストが出るだけという状態になってしまう.ネットにアクセスする必要があるのだろうか?⇒ダメだ.かなり具合が悪い.module/picoを外してみよう.picoを削除したらInstall module(0)に変化してボタンをクリックしてもエラーは発生しなくなった.

    install the latest altsys

    というエラーが出ているが,altsysはmoduleではなかったろうか?altsysがXoopsCore25に実装されているのかどうかはよく分からないが,extrasの中には入っている.pico以外はこれを参照していないように見えるので,まだ実装されていない可能性もある.altsysというのはやはりmoduleのようだ.XOOPS25にはSystemというモジュールが実装されているので,おそらくそれを代替するものと考えられる.XOOPS Cubeは大体そのような作りになっていたのではないかと思う.picoを拾ってきたのは本家XOOPSのサイトだったと思うのだが…⇒確かにそのようだ.つまり,XOOPSでサポートしているモジュールということになる.

    レポジトリにはAltsysというモジュールも存在する.既存Systemと共存できるのだろうか?altsysもxoops_trust_parhを持っている.その中にlibsというフォルダがあり,その下がaltsysだ.実装のxoops_trust_parhはxoops_trust_parh/xoops_lib/modules/となっているので,ここにaltsysを放り込むというのが妥当だろう.ここにはpicoとprotectorが入っている.htmlにはmodulesとpreloadが入っている.これでいけるはずだ.⇒Install module(1)になったが,ボタンクリックで画面が真っ白になってしまった.デバッグモードをオンにしてみる.popup modeを使ってみよう.以下のようなエラーが発生している.

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

    xoops_trust_pathの位置を合わせればよかったのだろうか?位置を変えて一応認識できたようだ.しかし,インストールした時点でエラーが発生し,Page is currently unavailableエラーになってしまった.戻るで復帰できたが,altsysはロードされていない.modulesには入っている.ALTSYSはインストール待ちの状態.以下のエラーが起きている模様だ.

    Notice: Only variables should be assigned by reference in file D:/XoopsCore25/xoops_trust_path/xoops_lib/libs/altsys/include/altsys_functions.php line 9

    line 9は以下のような行になっている.

    $module_handler =& xoops_gethandler( ‘module’ ) ;

    altsys : 1.インストール ~xoops_trust_pathの設定~
    http://xoops-manual.net/modules/manual2/index.php?page=article&storyid=9

    mainfileには以下のような記述がある.

    define(‘XOOPS_TRUST_PATH’, XOOPS_PATH);

    ここで

    XOOPS_TRUST_PATH=XOOPS_PATH= ‘D:/XoopsCore25/xoops_trust_path/xoops_lib’

    となっているので,パッケージのxoops_trust_pathをxoops_trust_path/xoops_libに合わせればよいということになる.いや,実際そのようになっているはずだ.むしろ,altsysはmoduleの中に入れるべきなのではないだろうか?それでは上記のエラーになってしまう.libsを使うように戻して以下のエラーになった.

    Error: ParseError: syntax error, unexpected ‘new’ (T_NEW) in file D:/XoopsCore25/xoops_trust_path/xoops_lib/libs/altsys/oninstall.php line 39

    このエラーはPHPのバージョンに関係するものではなかったろうか?いずれにしてもaltsysは新しいXOOPSにはよく適合していないように思われる…とりあえず,altsys と picoは外してxpressの導入を試してみることにしよう.ゴミが発生している可能性があるので,XOOPS25をもう一度クリーンインストールしてから始めることにする.今度はxoops_trust_pathというフォルダを作らずにxoops_libとxoops_dataをXOOPS25の直下に配置することにしよう.状況が少し変わったのでaltsysの導入にもう一度だけチャレンジしてみよう.xoops_libの位置がxoops_trust_pathということになる.一般設定でテーマを切り替えても切り替わらない.かなりおもしろくない.やはりaltsysはインストールできなかった.

    しかし,altsysは必ずしも仲間外れという訳でもない.当初のパッケージのextrasの中にはatlsys関係のファイルが2本入っている.このうちのatlsys_functions.txtには以下のメモが入っていた.(誰がこんなものに気付くだろう…)

    For those who use altsys module from GIJOE, replace /xoops_trust_path/libs/altsys/include/altsys_functions.php with the file altsys_functions.php in this directory.

    よく分からないがもう一度やってみる価値はありそうだ.ダメだ.やはりだるまさんになってしまった.XpressMeをインストールしてみたが,エラーになった.

    WordPress is not built in.
    The uninstallation of the module is executed now.

    いや,まだextrasにコピーしていなかったかもしれない.⇒extrasの内容をコピーしてインストールには成功しているのに,なぜか uinstall されてしまった.

    XPressME Integration KitはWordPressをXOOPSモジュールとして動作させるために必要なコードを追加するものですので、これだけではモジュールとして動作しません。

    ということのようだ.XOOPS から WordPress に移行したという人もいる.

    XOOPSとWordPressの違いは
    https://www.ailove60.com/?p=449

    XOOPS X(Ten) → WordPress への移行
    https://superficial.3724649.net/2017/10/06/20171006/

    このユーザはphpMyAdminを使ってMySQLから吸い上げた記事データ(CSV)をUploaded Fileでまとめて投稿するという方法で成功したという.これは検討に値する記事だと思う.

    XpressMe Integration Kit という日本語サイトがあるが,「永らくありがとうございました」ですでに終了している.最新投稿は2019/04/23だから比較的最近までは活動していた模様だ.XPressMe Integration Kit Ver 2.5.4は2016/06/16リリースとなっている.上記したようにWordPress本体のモジュールは自作しなくてはならないのだが,その情報源となっていたのがこのサイトだ.XpressMe Integration Kit は一般配布可能だが,本体モジュールは非合法化してしまったということなのではないだろうか?いや,XPressMeがXOOPSのレポジトリにある.⇒いや,違う.これはすでに手元にあるIntegration Kitだ.

    WordPress本体と言っているのはWordPressが配布しているwordpressそのものだ.確かにXOOPSとほとんど同じ作りになっている.これをmodulesに入れてみよう.バージョンは5.3.2だ.⇒wordpressのフォルダの中身とXpressMe Integration Kit の中身を混ぜて一つにしたらうまく行ったようだ.動くかどうかは分からないが…確かに動いていない.

    XOOPSへWordpress(モジュールxpress)を組み込む
    http://www.knts.net/Xlc/modules/pico/index.php?content_id=3

    上記リンクでは「解凍したWordpressの中にXPressME Integration Kitの中身を只放り込んでしまえばそれでXOOPSのモジュールの完成だ。」となっている.こちらではその逆にXPressME Integration Kitの中にWordpressの中身を放り込んだのだが,結果は同じになっているはずだ.(同名のファイルが存在しない限り)いずれにしてもこの方法は通用するはずなのでもう一度やり直してみよう.モジュールのアンインストールはすでに実行されているので,作り直したもので再インストールしてみよう.⇒以下のエラーになった.

    Error: Call to undefined function mysql_get_server_info()

    インストールは完了している.データベースとの接続確立エラーが起きているので本体はインストールされたもののデータベースに接続できていないという状況になっている可能性はあるような気がする.WordPressはXOOPSと独立にデータベースアクセスをやっているはずなので…WordPressの管理画面が出てくればいくらでも調整は可能だが,それ自体がオープンできない.phpMyAdminで見るとWordPress用のテーブルは生成されている…

    mysql_get_server_infoというのはPHPのbuilt-in functionのようだ.この関数はMySQLのバージョンを返す引数を持たない関数であるらしい.いや,引数を渡す場合もあるようだ.この関数はsystemで1箇所使っている場所があるほかは,すべてWPからの呼び出しになっている.この関数名はmysql_func_array.phpの中では定義されているが,本体は見つからない.

    https://www.php.net/manual/ja/function.mysql-get-server-info.php

    警告 この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。詳細な情報は MySQL: API の選択それに関連する FAQ を参照ください。 この関数の代替として、これらが使えます。
    mysqli_get_server_info()
    PDO::getAttribute(PDO::ATTR_SERVER_VERSION)

    しかし,define(‘XOOPS_DB_TYPE’, ‘mysql’);をmysqliとするとエラーになってしまう.

    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まで元に戻さないと修復不能なようだ.