サーバ機器が更新されて

上記のジャンルにあてはまらない話題、雑談など
アバター
sumida

サーバ機器が更新されて

投稿記事by sumida » 2011/1/14 22:33

昨年、レンタルサーバの機器が更新されました。
それに伴い、ソフトもバージョンアップ等がされました。
参考までに、その時の状況です。

・旧システム
   Apache 1.3系
   MySQL 4.0系
   PHP 4.3 (メモリ 8MB)

・新システム
   Apache 2.0系
   MySQL 4.1系
   PHP 4.3 (メモリ 64MB)
   併設 PHP 5.2 (メモリ 64MB)

※データベース等の移行は、サーバ側で行ってくれました。

状況:
更新後、サイトを表示したところ、文字化けもなく表示できました。
が、WOZを使用して表示していたWordPressのブログが、しっかり文字化けしていました。

PHPMyAdminで確認したところ、データベースの中身は合っていたので、WordPress側を調べてみました。

原因:
wp-includes/wp-db.phpで、「set names」を使用して文字コードにUTF-8を指定していた。
MySQL 4.0では、この部分がたぶん無視され、データベース・クライアントともにLATIN1として動作していた。
MySQL 4.1になり、この部分が機能し、データベースはLATIN1・クライアントはUTF-8として文字化けしていた。

対策:
wp-includes/wp-db.phpの「set names」にLATIN1を指定した。
これで、文字化けしなくなった。
サーバ更新後、新規記事やコメントを投稿していたら、対策後、この投稿分だけ、逆に文字化けしていたのだろう。

参考:
将来を考え、PHPは、5.2を使おうと思った。
これには、拡張子を「.php5」に変更すれば使用できる仕掛けになっているのだが、
そうすると、トップページのファイル名が「index.php5」になってしまい、Webブラウザのブックマークに登録していると不一致になってしまう。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: サーバ機器が更新されて

投稿記事by kimono » 2011/1/15 10:05

こんにちわ。kimonoです :)

mysqlの4.0系から移行された場合や、新規でデーターベースを作成する場合、Latin1になることが多いですが、本来は、SET NAME側をLatin1にするのではなく、データーベース側をUTF-8なり、EUC-JPなりで、作っておいて、そちらにデーターを移行した方がいいですね。
コマンドラインで、直接dumpなどされる場合は、あまり関係ないかもしれませんが、Latin1のままだと、phpmyadminなどを利用してデーターの修正を行ったり、バックアップを取ったり、移行しようとした場合、データーが全て文字化けしています。
ちなみに、現在既にphpmyadminで文字化けの場合は、phpmyadminからバックアップや、dumpはできませんので、mysqlコマンドで、文字コードをlatin1で指定してdumpしないといけませんね。

一応ですが、この辺りの文字コード関係で、うちも、数年前相当悩んでいましたので :oops:
アバター
sumida

Re: サーバ機器が更新されて

投稿記事by sumida » 2011/1/20 21:48

よくよく考えたら、PHP 5.2なのでPHP5は無理でした。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: サーバ機器が更新されて

投稿記事by kimono » 2011/1/21 09:58

日本語版のZen Cartはまだphp5.3は駄目ですが、php5.2は問題なく動作しますよ。
うちのレンタルサーバーも全てphp5.2ですので、問題なく全てのサイトが動作してます。
アバター
sumida

Re: サーバ機器が更新されて

投稿記事by sumida » 2011/1/22 14:20

kimono様

PHP5.2にしないのは、最初に書いたように「index.php5」にしなければならない点と、
別のトピックにありましたが、新規の場合v1.3.8aでは、SQLを修正しなければならない点(予定はないのですが)があるためです。

また、MySQL 4.1になったことで、データベースそのものUTF-8などにすることも検討してみました。

結果、使っているレンタルサーバでは、latin1のままのほうが無難なようです。

機器更新前:
MySQL 4.0 --> latin1(中身は、utf8として使用)
機器更新後:
MySQL 4.1 --> latin1(サーバ側で移行しているので、そのまま中身は、utf8として使用)

今回試してみたこと:
MySQL 4.1 --> utf8(テーブルをutf8として新規作成、既存テーブルの中身をコピー)

手順
(1) WordPressのテーブルをPHPMyAdminでエクスポート(UTF-8のSQLファイル)
(2) SQLファイルを変更
 (a) テーブル名の接頭語を変更
 (b) ファイル先頭に「set names utf8;」を追加
(3) PHPMyAdminでSQLファイルを実行
(4) 参照するテーブル名を変更して、WOZで確認(日本語を表示)
(5) PHPMyAdminでテーブル表示(日本語文字化け)

結果
サーバ備え付けのPHPMyAdminでは、
たぶん、MySQLへの接続をlatin1で行っているようで、
HTMLにUTF-8を指定することで、日本語を表示できているようです。
(サーバ側へは確認をとっていませんが)
そのため、テーブル自体をutf8で作成すると、逆にPHPMyAdminで修正ができなくなってしまいます。

対策
サーバ側のPHPMyAdminは、アドレスバーに表示される内容では、cgi-bin下に配置されているので、
自分のhtdocs下へ、自分で別途配置すれば問題ないかも。
アバター
sumida

Re: サーバ機器が更新されて

投稿記事by sumida » 2011/1/23 18:06

自分でPHPMyAdminを設置したところ、
サーバ備え付けのPHPMyAdminとは、逆の結果となりました。

 latin1のテーブル  文字化け
 utf8のテーブル  日本語表示

サーバ備え付けのPHPMyAdminは、バージョンが古いので、この辺の動作が異なるのかも。
アバター
sumida

Re: サーバ機器が更新されて

投稿記事by sumida » 2011/1/24 15:05

ネットで調べ、いろいろ試してみたところ、
libraries/database_interface.lib.php
を変更し、

コード: 全て選択

/*
    if (PMA_MYSQL_INT_VERSION >= 40100) {
   :
    } else {
        require_once './libraries/charset_conversion.lib.php';
    }
*/
        require_once './libraries/charset_conversion.lib.php';

config.inc.phpに、

コード: 全て選択

$cfg['AllowAnywhereRecoding'] = true;
$cfg['DefaultCharset'] = 'iso-8859-1';

を指定すれば、サーバ備え付けのphpMyAdminと同じようになりました。
アバター
sumida

Re: サーバ機器が更新されて

投稿記事by sumida » 2011/1/26 21:40

「set names」の発行について、
サーバ機器の更新にあたり、「WordPressで set names が発行されていた。」と書き込みましたが、ZenCart v1.3.8a(ビッグマウス社)も発行していました。

ただ、ZenCartの動作を軽くするモジュール:Query Cacheを組み込んでいました。
こちらのincludes/classes/db/mysql/query_factory.php(上書き)は、set names発行の処理がありません。
そのため、文字化けを起こさなかったようです。

という訳で、本来は、WordPressだけでなく、ZenCartも文字化けしていたと思われます。

“Zen Cart 雑談処「禅亭」” へ戻る