Fork me on GitHub

cuspy memo


update to wordpress 2.2.1

2007/07/28 Saturday 22:28:25

4人分の wordpress を 2.2.1 に移行完了。
ここの blog だけはもはや wordpress であって wordpress じゃないので結構時間が掛かってしまった。しかもトモさんがフランス語で書きたいとか言いだしたので EUC-JP から UTF-8 に移行したんだけどこれがまたくせ者だったのでメモ。

* DB のデータを UTF-8 に変換する

% mysqldump –default-character-set=binary -umemo -p memo > memo.db
% iconv -f EUC-JP -t UTF-8 memo.db > memo-utf8.db

としたら、「不正な入力シーケンスがありました」となり変換できない。原因は wp_options テーブルに rss_(md5みたいな)名前で何処かの誰かさんの feed 情報が含まれていているんだけどこの中に EUC-JP に無い文字が含まれていることが原因。

mysql> delete from wp_options where option_name like “rss_%”

と削除して mysqdump からやり直し。

* ファイルの変更
wp-config.php を

< mb_internal_encoding(“EUC-JP”);

> mb_internal_encoding(“UTF-8″);

< define (‘WPLANG’, ‘ja_EUC’);

> define (‘WPLANG’, ‘ja_UTF’);

theme の header.php に XML ディレクティブがある人はこれも変更。

* DB の変更
あともう一カ所 wordpress のマネジメントツールでエンコーディングを設定する所があるはずだけどそのエンコーディングの設定が出来ていないとマネジメントツールにログインでき無いというニワトリタマゴ。仕方ないので DB を直接更新。

mysql> update wp_options set option_value=’UTF-8′ where option_name=’blog_charset’;

* これで移行完了のはずなんだけどマネジメントツールにログインしようとすると

Warning: Invalid argument supplied for foreach() in /usr/local/webapp/wordpress-2.2.1/wp-includes/capabilities.php on line 31

というエラーが出てログインできない。
コードを追っかけてみると wp_options テーブルにある wp_user_roles というキーの設定データが不正であることが判った。
ユーザーのロールに関するデータが

s:6:\”管理人\”;(略)s:6:\”編集者\”;(略)s:4:\”作者\”;

という様に保持されているがこの 6という数字は EUC-JP で 6byte だということを意味していたようなので。

s:9:\”管理人\”;(略)s:9:\”編集者\”;(略)s:6:\”作者\”;

と変更することで正常にマネジメントツールにログインできるようになった。
wordpress の泥臭い一面をかいま見たような気がした。

No comments yet.

Leave a comment

You must be logged in to post a comment.