プログラムブログ

PHP、Database、ネットワーク、サーバセキュリティ

xserverでのwordpress2.1系から2.2系へのアップデート(文字コードEUC->UTF-8)

xserver(s30)上でwordpress2.1系をEUCで動かしていたのだが、wordpress2.1系はメンテナンス中止とのことで2.2系にアップすることにした。しかし….. 2.2系はUTF-8しか対応していない。
どうするかしばらく悩んでいたのだが、なんとかUTF-8に文字コードを変換してバージョンアップすることができたのでここにメモしておく。

1. バックアップ取得
DBおよびファイルのバックアップを取得

2. DBの変換
基本はここをみた。
バックアップしたDBダンプ(この時点ではEUC-JP)をUTF-8に変換するphpmyadminのハックがxserver上でのやり方がわからず、 ここは自前サーバを用意しそこにphpmyadminをインストールした。
DBダンプを自前サーバにアップする。(その際にエラーがでるので次の処理をした)
・SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”; の前に — をつけてコメントアウト
・wp_optionsテーブル中の rss_ で始まる行が文字化けしているので(ここだけUTF-8)、これらの行を削除。この削除によりinsert文の最後の行が変更になるので、 , を ; に書き換える。
これらの修正を入れた上で、phpmyadminのインポートで文字コードの変換なしに(EUC-JP)のままアップ。無事インポートに成功すればそのままエクスポート処理。その際に文字コードをUTF-8にする。

3. UTF-8に変換したSQLダンプをxserverにアップ
まずはSQLダンプの数か所の修正が必要。
・文字コードがUTF-8になったのでwp-optionsのblog_charsetの項目をEUC-JPからUTF-8に修正
・このままでは管理画面にアクセスするとあなたは権限がありませんみたいな表示になるので、wp_user_rolesを修正(これは漢字の文字コードがEUC-JPでは2バイトだったものがUTF-8では3バイトになることに起因している)
a:5:{s:13:”administrator”;a:2:{s:4:”name”;s:9:”管理人”;s:12:”capabilities”;a:47:{s:13:”switch_themes”;b:1;s:11:”edit_themes”;b:1;s:16:”activate_plugins”;b:1;s:12:”edit_plugins”;b:1;s:10:”edit_users”;b:1;s:10:”edit_files”;b:1;s:14:”manage_options”;b:1;s:17:”moderate_comments”;b:1;s:17:”manage_categories”;b:1;s:12:”manage_links”;b:1;s:12:”upload_files”;b:1;s:6:”import”;b:1;s:15:”unfiltered_html”;b:1;s:10:”edit_posts”;b:1;s:17:”edit_others_posts”;b:1;s:20:”edit_published_posts”;b:1;s:13:”publish_posts”;b:1;s:10:”edit_pages”;b:1;s:4:”read”;b:1;s:8:”level_10″;b:1;s:7:”level_9″;b:1;s:7:”level_8″;b:1;s:7:”level_7″;b:1;s:7:”level_6″;b:1;s:7:”level_5″;b:1;s:7:”level_4″;b:1;s:7:”level_3″;b:1;s:7:”level_2″;b:1;s:7:”level_1″;b:1;s:7:”level_0″;b:1;s:17:”edit_others_pages”;b:1;s:20:”edit_published_pages”;b:1;s:13:”publish_pages”;b:1;s:12:”delete_pages”;b:1;s:19:”delete_others_pages”;b:1;s:22:”delete_published_pages”;b:1;s:12:”delete_posts”;b:1;s:19:”delete_others_posts”;b:1;s:22:”delete_published_posts”;b:1;s:20:”delete_private_posts”;b:1;s:18:”edit_private_posts”;b:1;s:18:”read_private_posts”;b:1;s:20:”delete_private_pages”;b:1;s:18:”edit_private_pages”;b:1;s:18:”read_private_pages”;b:1;s:12:”delete_users”;b:1;s:12:”create_users”;b:1;}}s:6:”editor”;a:2:{s:4:”name”;s:9:”編集者”;s:12:”capabilities”;a:34:{s:17:”moderate_comments”;b:1;s:17:”manage_categories”;b:1;s:12:”manage_links”;b:1;s:12:”upload_files”;b:1;s:15:”unfiltered_html”;b:1;s:10:”edit_posts”;b:1;s:17:”edit_others_posts”;b:1;s:20:”edit_published_posts”;b:1;s:13:”publish_posts”;b:1;s:10:”edit_pages”;b:1;s:4:”read”;b:1;s:7:”level_7″;b:1;s:7:”level_6″;b:1;s:7:”level_5″;b:1;s:7:”level_4″;b:1;s:7:”level_3″;b:1;s:7:”level_2″;b:1;s:7:”level_1″;b:1;s:7:”level_0″;b:1;s:17:”edit_others_pages”;b:1;s:20:”edit_published_pages”;b:1;s:13:”publish_pages”;b:1;s:12:”delete_pages”;b:1;s:19:”delete_others_pages”;b:1;s:22:”delete_published_pages”;b:1;s:12:”delete_posts”;b:1;s:19:”delete_others_posts”;b:1;s:22:”delete_published_posts”;b:1;s:20:”delete_private_posts”;b:1;s:18:”edit_private_posts”;b:1;s:18:”read_private_posts”;b:1;s:20:”delete_private_pages”;b:1;s:18:”edit_private_pages”;b:1;s:18:”read_private_pages”;b:1;}}s:6:”author”;a:2:{s:4:”name”;s:6:”作者”;s:12:”capabilities”;a:10:{s:12:”upload_files”;b:1;s:10:”edit_posts”;b:1;s:20:”edit_published_posts”;b:1;s:13:”publish_posts”;b:1;s:4:”read”;b:1;s:7:”level_2″;b:1;s:7:”level_1″;b:1;s:7:”level_0″;b:1;s:12:”delete_posts”;b:1;s:22:”delete_published_posts”;b:1;}}s:11:”contributor”;a:2:{s:4:”name”;s:9:”寄稿者”;s:12:”capabilities”;a:5:{s:10:”edit_posts”;b:1;s:4:”read”;b:1;s:7:”level_1″;b:1;s:7:”level_0″;b:1;s:12:”delete_posts”;b:1;}}s:10:”subscriber”;a:2:{s:4:”name”;s:9:”協力者”;s:12:”capabilities”;a:2:{s:4:”read”;b:1;s:7:”level_0″;b:1;}}}

この状態でxserverのdatabseにアップ。ただし、私の場合は既存のdatabaseとは別に新規にdatabaseを作成してそちらにアップした。

4. wordpressのアップデート
最新の2.2.3で既存のファイルを上書きした。
そして、そのあと、wp-config.phpの次の項目をを修正。
mb_internal_encoding(”UTF-8″);
define (’WPLANG’,ja’);
新しいデータベースに接続先を変更 define(’DB_NAME’,’ ‘);
ここで、このままwp-config.phpをアップしてもwebブラウザでみるとEUC-JPのままかわらないことがあったので、いったんxserver上のwp-config.phpを削除。その状態でwebブラウザでアクセスしてセットアップ画面表示。そのあとwp-config.phpをアップするとうまくutf-8に表示がかわった。

あとはthemeファイルを修正して日本語をEUC-JPで直接記述している場合、UTF-8に修正。

.htaccess (SV30サーバなので) を次のようにしてうまく動作した。

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_input auto
php_value mbstring.http_output UTF-8
php_value mbstring.encoding_translation Off
php_value mbstring.detect_order Off
php_value mbstring.substitute_character none

# END WordPress

No comments yet. Be the first.

Leave a reply