XOOPSのUTFなお引っ越し その2

前回はデータベースの引っ越しについてぐたぐたと書いたが、今回はXOOPSの設定などについて。

1) ファイルのバックアップとリストア

sshで入って xoops_root_path と xoops_trust_path で指定したディレクトリを丸ごとtgzで固めよう…と思ったら、root_path側は圧縮中にタイムアウトする。
負荷が高すぎるのでプロセスがkillされたようだが、たかだか2GBくらいでタイムアウトとは、どんだけ弱いサーバなんだ。
(しかし、移転先のサーバも3分以上継続されたプロセスはkillされるのでレストアでもひやひやした)
というわけでいくつかに分けてバックアップを取る。

xoops_trust_pathはそんなに容量がないが、エラーが出る。
sessionやcacheディレクトリに所有者がapacheのファイルができてしまっているためだ。
これらは削除しちゃってもかまわないのでだが、特定ディレクトリやファイルを除外して圧縮バックアップするにはこんな感じ。

まずは除外したいディレクトリやファイルを記述したファイルを用意する。

xoops_trust_path/session/*
xoops_trust_path/cache/*

こんな感じで書いて適当なファイル名(この場合はhoge)で保存。

$ tar cvzXf hoge xoops_trust_path.tgz xoops_trust_path

なお、cronで行う場合はフルパスで書かないとエラーが出ることがある。

で、固めたファイルを新サーバで展開すると。

2) mainfile.phpの書き換え

mainfile.php や.htaccess を新サーバの環境に合わせて書き換える。
たいていの場合は xoops_root_path と xoops_trust_path のフルパス、データベース名、データーベースのユーザ名、パスワードくらいで済むはず。

3) 文字コードの変換

XOOPS Cube の場合は言語ファイル以外のPHPファイルに日本語が直書きされている部分はほとんどないはずだが、モジュールによってはあったりするので、そういう日本語ファイルがあればUTF-8に変換する。
移転したサイトの場合、PHPファイルに日本語なかったが、テーマのHTMLファイルには日本語あるので、変換した。
また、言語ファイルをカスタマイズしていたり、古いモジュールなどでUTF8の言語ファイルが用意されていない場合は、langage/japanese をディレクトリごと ja_utf8 としてコピーし、文字コードを変換する。


$ cp -r japanese ja_utf8
$ cd ja_utf8
$ find . -name "*.php" -print0 | xargs -0 nkf -w -Lu --overwrite

深い階層のファイルまでいっぺんに文字コードを変更する場合には、まずスクリプトを用意。


#!/bin/sh
nkf -w $1 > TEMP
mv -f TEMP $1

これをたとえばhenkan.shというファイル名で保存し、たとえばxoopsというディレクトリ以下全体にあるphpファイルの文字コードを変換する場合。


$ find xoops_root_path/xoops -name '*.php' -exec ./henkan.sh \{\} \;

*円記号に化けている箇所はバックスラッシュ

参考
www.e-tsuyama.com/cgi-bin/blog/ms.cgi?ShowDiary_file=/zencart/1177140934&blogid=20&t=sketch

4) パーミッション

casheやuploadなど書き込み可能にしなくてはならないディレクトリのパーミッションをチェックして、必要に応じて変更。

5) 言語選択

cubeUtilsで、言語切換をしている場合は、以下のファイルを書き換える。
conf_ml.ja_utf8_sample.php として設定例が用意されているので、それをコピーすればいける。
xoops_root_path/modules/cubeUtils/include/conf_ml.php

日英で切り替えてきる場合は、以下のファイルの最後の部分、210〜220行あたりを書き換える。
xoops_root_path/modules/legacy/language/english/global.php

変更前

if (!defined('_CHARSET')) {
define('_CHARSET', 'ISO-8859-1');
}
if (!defined('_LANGCODE')) {
define('_LANGCODE', 'en');
}
// change 0 to 1 if this language is a multi-bytes language
define("XOOPS_USE_MULTIBYTES", "0");

※EUC環境で変更していた場合は「ISO-8859-1」ではなく「EUC-JP」に変更されているはず。

変更後

if (!defined('_CHARSET')) {
define('_CHARSET', 'UTF-8');
}
if (!defined('_LANGCODE')) {
define('_LANGCODE', 'en');
}
// change 0 to 1 if this language is a multi-bytes language
define("XOOPS_USE_MULTIBYTES", "1");

「ISO-8859-1」の部分を「UTF-8」に変更し、マルチバイトの設定を「1」にするわけだ。

6) 使用言語を ja_utf8 に変更

管理画面の「互換モジュール>>全般設定 >>使用言語」を「ja_utf8」に変更。
altsysでコンパイル済テンプレートキャッシュをクリアしておく。
altsysの「言語定数管理」での設定も引き継がれるはずだが、反映されていない場合は手動で設定するしかない、と思う。
やっていないのでわからないが、 xoops_trust_path のキャッシュファイルをなんとかすればなんとかなるかもしれない。

なお、文字化け対策としてpreloadにHoge.class.phpなんておまじないを置いていた場合は削除しておく。

< ?php define("LEGACY_JAPANESE_ANTI_CHARSETMYSQL", true); ?>

こういうやつね。

だいたいこんなところでしょうか。
先達の知恵に感謝いたします。

コメントを残す