update to wordpress 2.2.1
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 の泥臭い一面をかいま見たような気がした。
Permanent Link: http://www.cuspy.org/blog/archives/478
Trackback URL: http://www.cuspy.org/blog/archives/478/trackback
