Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2017-04-09 21:43:33

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

サーバーバージョンアップに伴うデータベースのエンコード設定が不正

助けてください。

XREAのサーバーバージョンアップに伴い、(PHP5.3から7.0へのバージョンアップ等)
ブログが見えなくなってしまいました。

Ncleusのバージョンは最新に上げましたが、「データベースのエンコード設定が不正です」と出てしまい、XREAのほうで
バックアップのデータをいただきMySQLの復元を試みたのですが、HTTP ERROR 500が出てしまい、「データベースのエンコード設定が不正です」と出ることすら無くなってしまいました(泣)

phpMyAdminというツールでデータベースを確認すると、nucleus_itemやnucleus_commentは文字化けせず、残っていることからうまくやれば復元できるとは思っているのですが、どこから手を付けていいのか全くわかりません。

一度、Ncleusのフォルダーをいったんクリアにして、一から再インストールしてうまくいくでしょうか?
ただ、いろいろなPluginを使わせてもらっていたので、それが使えないとなると困るので、その設定は残したいのです。

質問として、いろいろと不足しているデータがあるとは思いますが、お知恵のほど、よろしくお願いいたします。

(ブログは10年以上溜まっており、復帰させたく、必死です)

オフライン

#2 2017-04-09 23:39:10

nshown
メンバー
登録日: 2008-01-05
投稿: 88

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

本番サーバーで運用しておられたNucleusのバージョンはphp7対応のVer.3.71ですか?
本番サーバーをあれこれ触るのは怖いので、ひとまずお手元でテスト環境を構築して稼働を確認してから、本番サーバーに移植するというルートをご検討されてはいかがでしょうか?

テスト用のWebサーバーソフトとしては、php7.1が使えるxamppの最新版が無料でダウンロードできます。ご参考まで。

また、「データベースのエンコード設定が不正です」でキーワード検索しますと、本フォーラムの記事がヒットするようですが、関連がないでしょうか?

オフライン

#3 2017-04-14 20:47:13

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

nshownさん

さっそくコメントいただいたのに返事が遅くなりまして大変申し訳ございません。

実は、プライベート(仕事)で忙しい状態が続いており、本件に関してまだ手をつけられていません。
週末から来週にかけても、出張となっておりますので、その後、アドバイスいただいたことを試してみたいと思っています。

また、しょうがない質問等することと思いますが、よろしくお願いいたします。

オフライン

#4 2017-04-14 21:28:36

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

PHP5.3に戻すと解決する事案だと思います

おそらく本体だけ更新して、プラグインを最新版に更新していないことが原因です

手間をかけずに、1分で 復旧させるには、PHP5.3に戻すしかありません。
この場合は、動作停止前と同様にプラグインの脆弱性があれば、セキュリティリスクを伴います

PHPの切り替え方は
サーバーのお知らせを読みましょう
https://www.xrea.com/info/brandnew2017.php

PHPを切り替えて、表示されない場合は、
config.phpのデータバースの接続先やパスワードなどがあっているかの確認が必要です

オフライン

#5 2017-04-21 17:35:23

yama
Administrator
登録日: 2005-07-07
投稿: 1,242
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

すいません、こちらチェックが遅くなりました。
使っているプラグインを教えていただけますか?最新の環境で動作しないものがあれば修正します。

オフライン

#6 2017-04-23 17:33:37

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

ピヨピヨbirdさん、返事が遅くなって大変もうしわけございませんでした。

PHPを5.3に切り替えましたが、なぜか以下のようなエラーが出てしまって、以前のように表示されません。

mySQL error with query SELECT * FROM nucleus_member WHERE mname='hogehoge': Lost connection to MySQL server during query
mySQL error with query SELECT p.pfile as pfile, e.event as event FROM nucleus_plugin_event as e, nucleus_plugin as p WHERE e.pid=p.pid ORDER BY p.porder ASC: MySQL server has gone away

Page headers already sent

The page headers have already been sent out in /virtual/moto84/public_html/masa.moto84.com/blog/nucleus/libs/sql/mysql.php line 128. This could cause Nucleus not to work in the expected way.

Usually, this is caused by spaces or newlines at the end of the config.php file, at the end of the language file or at the end of a plugin file. Please check this and try again.

If you don't want to see this error message again, without solving the problem, set $CONF['alertOnHeadersSent'] in globalfunctions.php to 0

何が起こっているのでしょうか?
アドバイスお願いいたします。


ピヨピヨbird さんの発言:

PHP5.3に戻すと解決する事案だと思います

おそらく本体だけ更新して、プラグインを最新版に更新していないことが原因です

手間をかけずに、1分で 復旧させるには、PHP5.3に戻すしかありません。
この場合は、動作停止前と同様にプラグインの脆弱性があれば、セキュリティリスクを伴います

PHPの切り替え方は
サーバーのお知らせを読みましょう
https://www.xrea.com/info/brandnew2017.php

PHPを切り替えて、表示されない場合は、
config.phpのデータバースの接続先やパスワードなどがあっているかの確認が必要です

オフライン

#7 2017-04-23 22:39:10

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

データベースのテーブルが破損
もしくは、MySQLのテーブル構造がアップグレードされていない可能性があります

Lost connection to MySQL server during query
というのは、いろいろな原因があって特定が難しいそうです

・MySQL に接続したまま何もせず一定時間経過した為
・他のユーザーにプロセスを強制的に終了させられた為
・MySQL をアップグレードした際に一部のテーブルが破損した為
・MySQL をアップグレードした際に MySQL の mysql_upgradeコマンドの実行を忘れているとき
  該当する場合は、ユーザーで実行できるコマンドではないので、XREAのサポートに実行してもらうしかないです。
・未定義変数をmysql関数にいれて呼んだとき(クエリが表示されているので,今回は該当しない)
・その他
などがあります。

nucleus_member までたどり着いていますので、
config.phpの設定で
データベースへの接続は確立していると考えてよさそうです。

Nucleusでは、この位置でのデータベースの切断は通常ありませんので
MySQLが原因の以下の2個が疑われます

(1) データベースのテーブルが壊れている または、アップグレードに伴うアップグレードコマンドが管理者権限で実行されていない
(2) 実行中のまま終了できていないデータベースプロセスがたくさんあり同時アクセス制限にかかっている

手順
SQLのテキストデータでのフルバックアップファイルがあればリストアしなおすことで直ると思いますが
とりあえず持っていない場合は
(1) phpMyAdmin でデータベースの管理画面を表示する

(2) テーブルを「すべてチェックする」をクリックして、「テーブルをチェックする」
   で異常がないか確認する。

   「テーブルを修復する」を選ぶとチェックと修復をしてくれる。
   破損している場合はデータがなくなったり、文字化けしたりすることがあるそうなので、
   バックアップがないなら先にバックアップをしておく。
   なにか修復されたようなら、もう一度データベースをエクスポートしてバックアップしておく。

(3)実行中のまま終了できていないデータベースプロセスがないかチェックし、あれば停止する
「状態」「プロセス」をクリックする
1個は、phpMyAdmin なので、
2個以上表示されて ハングアップしてそうなら 左隅の「停止」をクリックする
(「時間」で判断できる)

(4)アップグレードファイルの中の
nucleus/upgrades/convert.php
を実行してみる。

上記が該当しないようなら
Nucleusのドライバ設定を変更して PDO接続し
なにかヒントになるような違うエラーが表示されないか試してみてください。

config.phpの
$MYSQL_HANDLER = array('mysql','');
を探してその下に
$MYSQL_HANDLER = array('pdo','mysql');
を追加して 値を上書きします

エラーなどの表示の確認がおわりましたら
必ずもとの設定
$MYSQL_HANDLER = array('mysql','');
が有効になるようにしてください。

編集者 ピヨピヨbird (2017-04-23 22:47:51)

オフライン

#8 2017-04-24 22:47:34

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

コメントありがとうございます。
とりあえず、アドバイスいただいた【手順】に沿ってやってみました。

>(1) phpMyAdmin でデータベースの管理画面を表示する
>(2) テーブルを「すべてチェックする」をクリックして、「テーブルをチェックする」
>  で異常がないか確認する。

すべてOKと表示されました。

>(3)実行中のまま終了できていないデータベースプロセスがないかチェックし、あれば停止する
>「状態」「プロセス」をクリックする

すいません。この「状態」「プロセス」がどうしたらいいのかわかりません。
「構造」タブから進むのでしょうか?

>(4)アップグレードファイルの中の
>nucleus/upgrades/convert.php
>を実行してみる。

以下のようなメッセージで終了します
mySQL error with query SELECT * FROM nucleus_member WHERE mname='hogehoge': Lost connection to MySQL server during query
mySQL error with query SELECT p.pfile as pfile, e.event as event FROM nucleus_plugin_event as e, nucleus_plugin as p WHERE e.pid=p.pid ORDER BY p.porder ASC: MySQL server has gone away

mySQL error with query SHOW FULL COLUMNS FROM `nucleus_config` LIKE 'name': MySQL server has gone away

mySQL error with query SHOW TABLES LIKE 'nucleus_%': MySQL server has gone away

Nucleusのtableがありません。何もせずに終了します。

>上記が該当しないようなら
>Nucleusのドライバ設定を変更して PDO接続し
>なにかヒントになるような違うエラーが表示されないか試してみてください。

PDO接続とは何でしょうか?どのようにすればよろしいでしょうか?

お手数おかけしますがよろしくお願いいたします。



ピヨピヨbird さんの発言:

データベースのテーブルが破損
もしくは、MySQLのテーブル構造がアップグレードされていない可能性があります

Lost connection to MySQL server during query
というのは、いろいろな原因があって特定が難しいそうです

・MySQL に接続したまま何もせず一定時間経過した為
・他のユーザーにプロセスを強制的に終了させられた為
・MySQL をアップグレードした際に一部のテーブルが破損した為
・MySQL をアップグレードした際に MySQL の mysql_upgradeコマンドの実行を忘れているとき
  該当する場合は、ユーザーで実行できるコマンドではないので、XREAのサポートに実行してもらうしかないです。
・未定義変数をmysql関数にいれて呼んだとき(クエリが表示されているので,今回は該当しない)
・その他
などがあります。

nucleus_member までたどり着いていますので、
config.phpの設定で
データベースへの接続は確立していると考えてよさそうです。

Nucleusでは、この位置でのデータベースの切断は通常ありませんので
MySQLが原因の以下の2個が疑われます

(1) データベースのテーブルが壊れている または、アップグレードに伴うアップグレードコマンドが管理者権限で実行されていない
(2) 実行中のまま終了できていないデータベースプロセスがたくさんあり同時アクセス制限にかかっている

手順
SQLのテキストデータでのフルバックアップファイルがあればリストアしなおすことで直ると思いますが
とりあえず持っていない場合は
(1) phpMyAdmin でデータベースの管理画面を表示する

(2) テーブルを「すべてチェックする」をクリックして、「テーブルをチェックする」
   で異常がないか確認する。

   「テーブルを修復する」を選ぶとチェックと修復をしてくれる。
   破損している場合はデータがなくなったり、文字化けしたりすることがあるそうなので、
   バックアップがないなら先にバックアップをしておく。
   なにか修復されたようなら、もう一度データベースをエクスポートしてバックアップしておく。

(3)実行中のまま終了できていないデータベースプロセスがないかチェックし、あれば停止する
「状態」「プロセス」をクリックする
1個は、phpMyAdmin なので、
2個以上表示されて ハングアップしてそうなら 左隅の「停止」をクリックする
(「時間」で判断できる)

(4)アップグレードファイルの中の
nucleus/upgrades/convert.php
を実行してみる。

上記が該当しないようなら
Nucleusのドライバ設定を変更して PDO接続し
なにかヒントになるような違うエラーが表示されないか試してみてください。

config.phpの
$MYSQL_HANDLER = array('mysql','');
を探してその下に
$MYSQL_HANDLER = array('pdo','mysql');
を追加して 値を上書きします

エラーなどの表示の確認がおわりましたら
必ずもとの設定
$MYSQL_HANDLER = array('mysql','');
が有効になるようにしてください。

オフライン

#9 2017-04-25 21:52:33

yama
Administrator
登録日: 2005-07-07
投稿: 1,242
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

SELECT * FROM nucleus_member WHERE mname='hogehoge'

特にクセのない普通のselect文ですね。phpMyAdminでnucleus_memberテーブルのバックアップ(エクスポート)をとることはできますか?できる場合はNucleus側に何らかの問題がある可能性もありますが、エラーメッセージの性質としてはやはりサーバ側の問題っぽい気がします。

オフライン

#10 2017-04-25 22:08:40

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

yamaさん

phpMyAdminでnucleus_memberテーブルのエクスポートをしてみましたが、実行後、白い画面(?)になります。このエスクポートデータはどこに作られるのでしょう?それを確認する手段が、お恥ずかしいながらわかりません。

もうしばらくお付き合いください。


yama さんの発言:
SELECT * FROM nucleus_member WHERE mname='hogehoge'

特にクセのない普通のselect文ですね。phpMyAdminでnucleus_memberテーブルのバックアップ(エクスポート)をとることはできますか?できる場合はNucleus側に何らかの問題がある可能性もありますが、エラーメッセージの性質としてはやはりサーバ側の問題っぽい気がします。

オフライン

#11 2017-04-26 08:14:01

yama
Administrator
登録日: 2005-07-07
投稿: 1,242
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

https://www.google.co.jp/search?q=phpMy … C%E3%83%88
phpMyAdminの操作は詳しく説明しているサイトがいくつかあるので、いちおう確認してみてください。
エクスポートデータは基本的にはそのままブラウザに表示されるかダウンロードファイルとして出力するかのどちらかなので、白紙状態に遷移するということは、やっぱり変ですね。CMS側の問題ではなさそうな気がします。

オフライン

#12 2017-04-26 23:12:12

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

一番初めに

まさ328 さんの発言:

XREAのほうで
バックアップのデータをいただきMySQLの復元を試みた

とありますが

エクスポートを知らないことからするとインポートを知っているとは思えないのですが
この

バックアップのデータをいただき

のバックアップのデータはどのようなものですか?

・自分でバックアップのデータをもとにmysqlサーバーに復元したのでしたら
  なんらかの「作業手順が間違っている」か「バックアップデータが破損している」かのどちらかです。

・もしmysqlサーバーにxrea側で全部データを復元したものをバックアップのデータとお呼びの場合は、
以前書いたように、新しいmysql用にテーブルの内部構造をアップグレードしていない可能性がありますので
xreaサポートに 問い合わせる必要があります。 (mysql_upgradeコマンド)

編集者 ピヨピヨbird (2017-04-26 23:22:01)

オフライン

#13 2017-04-27 21:02:07

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

yamaさん

xrea側でphpMyAdminを新規にインストールしていただき(ついでにバージョンもあがったようです)バックアップを取ることはできました。なにかヒントになりますでしょうか。

まさ328 さんの発言:

yamaさん

phpMyAdminでnucleus_memberテーブルのエクスポートをしてみましたが、実行後、白い画面(?)になります。このエスクポートデータはどこに作られるのでしょう?それを確認する手段が、お恥ずかしいながらわかりません。

もうしばらくお付き合いください。


yama さんの発言:
SELECT * FROM nucleus_member WHERE mname='hogehoge'

特にクセのない普通のselect文ですね。phpMyAdminでnucleus_memberテーブルのバックアップ(エクスポート)をとることはできますか?できる場合はNucleus側に何らかの問題がある可能性もありますが、エラーメッセージの性質としてはやはりサーバ側の問題っぽい気がします。

オフライン

#14 2017-04-27 21:15:18

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

追記です。

新しいmysql用にテーブルの内部構造をアップグレードしていない可能性があるのでxreaサポートに 問い合わせてみてはといただきましたが、残念ながらmysql_upgrade は実行しているとのことでした。



ピヨピヨbirdさん

説明が足らずにすいません。
復元したとあるのは、カスタマーサポートの方で作ってもらったdumpファイルをphpMyAdminからインポートしました。
ただ、その前にいろいろいじった(?)こともあり、サポートから

>ディレクトリ構成を元にもどさせていただいて、
>メンテナンス前の状態と同じにさせていただいていて

とあったので、データを含むデータはphpがバージョンアップされる前の状態に戻してもらっています。

そのうえで、phpを5.3に戻したのですが、前術のようなエラーが出ている次第です。

ピヨピヨbird さんの発言:

一番初めに

まさ328 さんの発言:

XREAのほうで
バックアップのデータをいただきMySQLの復元を試みた

とありますが

エクスポートを知らないことからするとインポートを知っているとは思えないのですが
この

バックアップのデータをいただき

のバックアップのデータはどのようなものですか?

・自分でバックアップのデータをもとにmysqlサーバーに復元したのでしたら
  なんらかの「作業手順が間違っている」か「バックアップデータが破損している」かのどちらかです。

・もしmysqlサーバーにxrea側で全部データを復元したものをバックアップのデータとお呼びの場合は、
以前書いたように、新しいmysql用にテーブルの内部構造をアップグレードしていない可能性がありますので
xreaサポートに 問い合わせる必要があります。 (mysql_upgradeコマンド)

編集者 まさ328 (2017-05-01 21:33:50)

オフライン

#15 2017-05-01 21:44:07

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

お世話様です。
いろいろと事象を再度まとめてみました。

Xrea自身、PHPのバージョンを5.3から7.0までコントロールパネルで設定できるので現状をチェックしてみました。

すると、5.3とそれ以降(5.4 5.5 7.0で試しました)で2種類の結果となっています。

まず、ログイン画面に直接に飛んだ場合、
「データベースのエンコード設定が不正です。」と表示され
ログインID、パスワード等を入力する画面に行きます。(login.gif)
その後、ログインをすると、

Missing database encoding.
mySQL error with query SELECT p.pfile as pfile, e.event as event FROM nucleus_plugin_event as e, nucleus_plugin as p WHERE e.pid=p.pid ORDER BY p.porder ASC: Lost connection to MySQL server during query
mySQL error with query SELECT * FROM nucleus_member WHERE mname='hogehoge': MySQL server has gone away


Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /virtual/moto84/public_html/masa.moto84.com/blog/nucleus/libs/sql/mysql.php on line 247

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /virtual/moto84/public_html/masa.moto84.com/blog/nucleus/libs/sql/mysql.php on line 205
mySQL error with query INSERT INTO nucleus_actionlog (timestamp, message) VALUES ('2017-05-01 17:29:02', 'Login failed for masa'): MySQL server has gone away

mySQL error with query SELECT COUNT(*) AS result FROM nucleus_actionlog: MySQL server has gone away


Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /virtual/moto84/public_html/masa.moto84.com/blog/nucleus/libs/sql/mysql.php on line 247

となります。(泣)

5.4 5.5 7.0の場合は、
ログイン画面に直接に飛んだ場合、
「データベースのエンコード設定が不正です。」と表示され
ログインID、パスワード等を入力する画面に行きログインすると、(login.gif)
「データベースのエンコード設定が不正です。」と表示され
あなたのBlog画面から(54login.gif)(この状態でも表示が変だが)
アイテムの編集/削除を選ぶと
「データベースのエンコード設定が不正です。」と表示され
Blogアイテムの編集 (blog1.GIF)
内のデータが文字化け状態で表示されます。

また、5.4 5.5 7.0の場合は、直接ブログサイトに飛ぶと
PASS hogehoge1234 => -ERR authorization failed
と表示されるのですが、よくよく見るとタイトルバーが文字化けしているので、エンコードを
自動(EUC)からUTF-8にするとタイトルは文字化けしない状態になります。

(当然、画面はPASS hogehoge1234 => -ERR authorization failedのままですが)

ちなみに、ソースは

<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
・・・
としているので、データがUTF-8となっているということでしょうか。
いや、MySQLでのデータベース設定で文字コードをみたらUTF-8でした。

これはあまり参考にならないですかね・・・。

なお、使用しているNucleusはV3.71です。

今回の不具合が起きた時(確か上記5.3で見られたような不具合)、一度Nucleusのバージョンアップを試みています。
ただ、その時は最新バージョンですみたいなコメントが出たように記憶しています。

それも今回の要因のひとつになっているのでしょうか?


Attachments:
gif login.gif, Size: 21.94 KiB, Downloads: 13
gif 54login.gif, Size: 55.11 KiB, Downloads: 13
gif blog1.gif, Size: 78.85 KiB, Downloads: 16

オフライン

#16 2017-05-02 16:21:04

nshown
メンバー
登録日: 2008-01-05
投稿: 88

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

phpのバージョンアップ前に稼働していたシステム環境(とくにOS、webサーバー、MySQL、phpの各バージョン)について情報をお出しになるとレスが付きやすいのではないかと思います。

その上で、xreaさんの方で採取して頂いたというバックアップの文字コードは何でしたでしょうか?

また、eucとかUTF8といった文字コードに関わるキーワードが複数登場していますが、そもそもとして一点ご確認頂きたいのは、文字コードが(1)サーバー、(2)データベース、(3)テーブルで整合しておられますでしょうか?

そこら辺りのご確認方法についてご参考までに、下記アドレスをご一読になられてはいかがでしょう。
EUCからUTF-8で文字化け解消方法

オフライン

#17 2017-05-02 18:23:10

yama
Administrator
登録日: 2005-07-07
投稿: 1,242
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

もしよければ詳細に調べてみます。 yamamoto@kyms.jp まで連絡いただけますか?

オフライン

#18 2017-05-03 13:46:37

まさ328
メンバー
From: 東京の40おやじ
登録日: 2004-09-15
投稿: 53
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

nshownさん

バージョンアップに伴い、以下のように変更があったようです。
5.3 + FastCGI (5.4/5.5/5.6/7.0/7.1 FastCGI選択可) から
7.0 + FastCGI + OPcache + APCu(5.3/5.4/5.5/5.6/7.1 FastCGI選択可)

MySQL 5.6 から 5.7

Webサーバー    Apache 2.2系    から Apache 2.4系


また、バックアップしてもらった文字コードはUTF-8です。

データベースはUTF-8 テーブルもUTF-8のようです。


nshown さんの発言:

phpのバージョンアップ前に稼働していたシステム環境(とくにOS、webサーバー、MySQL、phpの各バージョン)について情報をお出しになるとレスが付きやすいのではないかと思います。

その上で、xreaさんの方で採取して頂いたというバックアップの文字コードは何でしたでしょうか?

また、eucとかUTF8といった文字コードに関わるキーワードが複数登場していますが、そもそもとして一点ご確認頂きたいのは、文字コードが(1)サーバー、(2)データベース、(3)テーブルで整合しておられますでしょうか?

そこら辺りのご確認方法についてご参考までに、下記アドレスをご一読になられてはいかがでしょう。
EUCからUTF-8で文字化け解消方法

オフライン

#19 2017-05-04 00:31:12

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

※切断される理由がわからないので、
サーバー更新前のバックアップデータもあることですし
もともと使っていたNucleusのバージョンにて、正常表示できるようにしてから、Nucleusをアップグレードしたほうがいいです。

Nucleus 3.71

まさ328 さんの発言:

Missing database encoding.

Missing database encoding.
というのは、おそらく、この部分なのです
(データベースの文字コートと Nucleusのグローバル設定の言語が違う場合に表示されるらしい)
https://github.com/NucleusCMS/NucleusCM … ql.php#L82
EUC-JPを使う場合は、この部分に $charset = 'ujis';
を無理やり代入してあげれば直るかもしれないです。

EUC-JPを使う理由がないのなら、UTF8を使うように更新するといいです
UPDATE nucleus_config SET value='japanese-utf8' WHERE name='Language';

編集者 ピヨピヨbird (2017-05-04 00:45:10)

オフライン

#20 2017-05-04 10:49:57

nshown
メンバー
登録日: 2008-01-05
投稿: 88

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

管理画面で文字化けや文字があるべき箇所に文字が表示されないという現象についてですが、管理画面にはログインできていらっしゃるようなので、次のことをお試し下さい。

01.管理画面の左サイドのメニューにある[グローバル設定]をクリック
02.右側の[グローバル設定]テーブルにある[使用する言語]がどうなっているか確認する。
03.もし"japanese-euc"となっていましたら、"japanese-utf8"に切り替える。
04.[設定を更新]ボタンをクリック


それから色々エラーが出ている件ですが、まずはアップロード先のディレクトリとファイルについて、アップデートに当たってパーミッションは正しく設定されておりますでしょうか?

オフライン

#21 2017-05-04 14:45:50

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

★mysqlのNucleusのデータベース テーブルを削除して、
インポートからやり直すことをお勧めします。
(1) 使っていたNucleusのバージョンに戻す
v3.71-ja を使いたい場合は、nucleus/libs/sql/mysql.php を修正する
(2) データベース のテーブルを削除して、もらったバックアップを使ってインポートしなおす
(3) サイトを表示してみる

編集者 ピヨピヨbird (2017-05-04 15:20:43)

オフライン

#22 2017-05-04 15:21:17

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

文字化けの再現方法 v3.71-ja
(mysqlの切断は再現しませんでした。)

(1) EUC-JPで新規インストール
   この段階でデータベースのテーブルは ujis_japanese_ci になっている
(2) サイトは正常に表示される

(3) nucleus/upgrades/convert.php を実行する
   utf8_general_ciに変換すると表示される
   この段階でデータベースのテーブルは utf8_general_ci になっている
(4) サイトが空白になる
  管理画面は表示される
   convert.phpを実行したためデータが破損している

-----------------------

nucleus/upgrades/convert.php を修正する

$ git diff nucleus/upgrades/convert.php
diff --git a/nucleus/upgrades/convert.php b/nucleus/upgrades/convert.php
index f7eb81e..4e2487c 100644
--- a/nucleus/upgrades/convert.php
+++ b/nucleus/upgrades/convert.php
@@ -35,10 +35,10 @@ foreach($srcTableNames as $srcTableName) {
     sql_query("CREATE TABLE `{$tmpTableName}` LIKE `{$srcTableName}`");
     sql_query("ALTER TABLE `{$tmpTableName}` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");

+    sql_query('SET NAMES utf8');
     $rs = sql_query("SELECT * FROM `{$srcTableName}`");
     if(sql_num_rows($rs)==0) continue;

-    sql_query('SET NAMES utf8');
     while($row = sql_fetch_object($rs)) {
         $fields = array();
         $values = array();

修正後インストールから上記の手順1-4をやり直し、
ログイン後、グローバル設定の言語設定を japanese-euc に変更する
サイトを表示すると文字化けする。

修正コード

$ git diff nucleus/libs/sql/mysql.php
diff --git a/nucleus/libs/sql/mysql.php b/nucleus/libs/sql/mysql.php
index 26c3879..bf02384 100755
--- a/nucleus/libs/sql/mysql.php
+++ b/nucleus/libs/sql/mysql.php
@@ -82,7 +82,7 @@ if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
                        if($charset !== $charsetOfDB) {
                                global $CONF;
                                $CONF['adminAlert'] = '_MISSING_DB_ENCODING';
-                               $charset = $charsetOfDB;
+//                             $charset = $charsetOfDB;
                        }
                }
                sql_set_charset($charset);

オフライン

#23 2017-05-06 00:02:03

ma
メンバー
登録日: 2004-04-01
投稿: 60
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

お世話になっております。
私もxreaのリニューアルに伴ってサイトが表示されなくなっていました。

まささんと同様  -引用
5.3 + FastCGI (5.4/5.5/5.6/7.0/7.1 FastCGI選択可) から
7.0 + FastCGI + OPcache + APCu(5.3/5.4/5.5/5.6/7.1 FastCGI選択可)
MySQL 5.6 から 5.7
-引用終

nucleusのバージョンは3.7。アップグレードしても症状変わらずです。

・itemNo.無しでアクセスすると真っ白。
・itemNo.があると
mySQL error with query SELECT p.pfile as pfile, e.event as event FROM nucleus_plugin_event as e, nucleus_plugin as p WHERE e.pid=p.pid ORDER BY p.porder ASC: MySQL server has gone away
以下同
・管理画面にはアクセスできますが、プラグイン管理へいくと、左ペインがなくなってしまい、13個あるはずのプラグインが1つだけ(アクション欄は空白)しか表示されません。また、何かのアクションで画面遷移が起こると真っ白画面になってしまう。
・phpMyAdminで見るとデータは全てきちんと残っていますが、これもまささんと同様エクスポートが出来ず、画面真っ白になります。
・phpを5.3にしても直りません。

といったところが現状です。

うーむ。困りました。

オフライン

#24 2017-05-06 10:21:27

yama
Administrator
登録日: 2005-07-07
投稿: 1,242
ウェブサイト

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

メールで連絡をとってまささんのサイトをいろいろ調べてみました。
まず、PHP5.3では多少の調整で動作するようになりました。
PHP7(v7.0.17)では難航しました。
管理操作履歴を見てみると「プラグイン「-1」を読み込めませんでした(ファイルが見つかりません)」といったログがあったので調べてみたら、実際に「-1」というプラグイン名が渡っていました。

https://github.com/NucleusCMS/NucleusCM … #L465-L474
上記の判定で「-1」が渡っています。

https://github.com/NucleusCMS/NucleusCM … #L516-L527
処理をたぐると、上記部分で取得される値がどうもおかしい。
「SELECT pid, pfile FROM nucleus_plugin」という単純なクエリーなんですが、意図どおりの値が返ってこず、先頭のデータ(今回はNP_Counter)が抜けた状態で返ってきます。

mysql_connect($MYSQL_HOST,$MYSQL_USER,$MYSQL_PASSWORD);
mysql_select_db($MYSQL_DATABASE);
$rs = mysql_query("SELECT pid, pfile FROM nucleus_plugin");
$_ = array();
while($row = mysql_fetch_row($rs)) {
	$_[] = $row;
}
echo count($_);

Nucleus本体の問題とは思えなかったので、Nucleus本体とは別に上記のようなスクリプトを即席で書いて確認したところ、やはりデータがひとつ足りません。

SELECT pid, pfile FROM nucleus_plugin
上記を
SELECT pid, pfile FROM nucleus_plugin ORDER BY pid
このようにorder by句を追加すると、意図どおり全件取得できます。

インデックスが壊れてるような気がしたので、テーブルを修復したら直りました。PHP5.3の時点では問題なかったのですが。
そして念のために全テーブルを修復したら、今度は管理画面もサイトも出力が真っ白になりました。正しく処理が渡るようになったためにhtmlspecial関数の古い記述などが絡んで出力されなくなった可能性もあるので、プラグインをひとつずつ外して調べていくと、正しく表示されるようになりました。その後、プラグインをひとつずつ修正し、全てのプラグインを有効にしても正しく表示されるようになりました。
テーブル修復の処理をupgradeスクリプトに追加するとよいかもしれないですね。

あと、PHP7なのでmysql_emulate.phpが動作しているものと思ってましたが、よく調べてみるとネイティブのmysql関数が動作しています。PHPのコンパイルオプションなどでこういうことが可能なんでしょうか?

今回は多数のプラグインを修正しました。プラグインで機能を手軽に拡張できるのがNucleusの長所ではありますが、今回みたいに環境が新しくなった場合はアップデートが大変ですね。コアだけアップデートすれば完了。というふうにはいかないので。全てのプラグインを各所から集めてきてアップデートする手間があります。できるだけGitHubに集めるようにしてますが、まだまだ回収しきれてません。

token_get_all関数を使うなどして、プラグインの互換性の問題をある程度見つけることができるような独立スクリプトを作ると、PHP7への移行をもう少しスムーズに進められるかな?と思いました。

オフライン

#25 2017-05-06 15:00:38

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: サーバーバージョンアップに伴うデータベースのエンコード設定が不正

yama さんの発言:

あと、PHP7なのでmysql_emulate.phpが動作しているものと思ってましたが、よく調べてみるとネイティブのmysql関数が動作しています。PHPのコンパイルオプションなどでこういうことが可能なんでしょうか?

PHP7には、標準でバンドルされていないので

PHP7に対応したmysql拡張モジュール
のソースコードまたはコンパイル済みのモジュール
を持ってくれば使用できます。

https://pecl.php.net/package/mysql

PHP7と一緒に自動的にビルドする場合は、php7ソースコード/ext/mysqlに配置します

単体でモジュールがほしい場合は
mysql拡張モジュールのソースコードのフォルダ(mysql)で
phpize
./configure
make
するとコンパイル済みのモジュールができます
(システムによっては、configure でmysqlの場所を指定する必要があります)

OSのディストリビューションによっては、パッケージとして提供されていて簡単にインストールできるようになっているかもしれないです。

オフライン

Board footer