OpenPNEにおいて、バージョンアップによってメールアドレスが文字化けする問題が最近ありました。
いろいろ情報をあさったところ、OpenPNE付属のPEER Crypt/Blowfish関数の古いバージョンに起因するバグに問題があるようです。(MCryptが入っていない事が原因だ、と書いてある情報がありますが、具体的には違うと思います。MCryptが問題ではなくて、Blowfishのバグが問題です。それにより、新バージョンではバグが直っているので、バグありの状態でエンコードしたものが、新バージョンでデコードできないためです。)
http://q.hatena.ne.jp/mobile/1150003912
このバグはプラットホームによって発現するようです。チェックするには
< ? php
echo -2861207174 ^ 493813264;
? >
この値が、1209765738ならOK、-1653670384 だとバグありです。
内部で使用されているunsigned int の演算に問題があるようです。
このOpnePNE付属のPEER Crypt/Blowfish関数は、システムのPHPでMCrypt拡張モジュールが使える状態では、MCryptを使用しています。(新旧のOpenPNEともに)
使えない環境では、付属のライブラリで暗号化しています。
なので、既にMCRyptモジュールが使えるようになっている環境では、新旧ともにMCryptを使うはずなので、問題にならなかったかと思います。
あと、バグなしのBlowfishで、なおかつMCryptが導入されていない環境から、
MCryptがある環境へ移行する際も、文字化けしてしまいました。
その場合は、
define('CRYPT_BLOWFISH_NOMCRYPT', true);
をコンフィグに記述してやると新しいOpenPNEではMCryptを使用しない設定にできます。
これによってCrypt/Blowfishを使うので文字化けしません。
とりあえず、メールアドレス文字化け問題が起きる条件を書いてみますと、
移行元 移行先
1 (MCryptなし)旧バグありCrypt/Blowfish (MCryptなし)新バグなしCrypt/Blowfish
2 (MCryptなし)旧バグありCrypt/Blowfish MCrypt拡張モジュールあり
3 MCrypt拡張なし(新OpenPNE状態で) MCrypt拡張モジュールあり
移行ツールを作りましたのでぜひご利用ください。
(データベースを更新するため、mysqldumpやphpMyAdminでバックアップを作ってください)
OpenPNE2.6.2でのみ確認済みです。
これらは、文字化けが発生している状態の新バージョンのOpenPNEで実行してください。
1.の条件用
convert_blowfish.phpをpublic_html以下に置く
そして、public_htmlに移動して、コマンドで、/usr/bin/php convert_blowfish.php と実行。
2.の条件用
convert_blowfish_NOEXT.phpをpublic_html以下に置く。
BlowfishOldNOEXT.php
OPENPNE_DIRのlib/include/Crypt/以下に
public_htmlに移動して、/usr/bin/php convert_blowfish_NOEXT.php を実行。
3.の条件用
convert_blowfish_mcrypt.phpをpublic_html以下に置く。
BlowfishNOEXT.php
OPENPNE_DIRのlib/include/Crypt/以下に
public_htmlに移動して、/usr/bin/php convert_blowfish_mcrypt.php を実行。
何度もいいますが、データベースのバックアップを取ってください。
それか、別ディレクトリ、別データベースで動かして、その環境で移行してから、確認して元の方へデータベースをそのまま移行するのが良い手だと思います。
本当は、こういう移行ツールを本家で入れておいてくれたら良いと思うのだけど。
なんだか、OpenPNEはドキュメントが足りないと思う。
ランキングアップにご協力ください。
