新規投稿等すべての更新が出来ない。
-
私もロールダウンしてなんとかしのいでいます。
http://www.tedoyo.com/blog/wordpress-4-1-2%E3%81%AE%E3%83%90%E3%82%B0%E3%81%A3%E3%81%A6%E3%81%A9%EF%BD%9E%E3%82%88/早く最新バージョンで手当てしてほしいです。
たくさんのご教授をいただきありがとうございました。
私の環境は以下の通りです。PHPのバージョン:5.2
MySQLのバージョン:5.1
サーバのサービス(レンタルサーバ or クラウド等):さくらのレンタルサーバ・スタンダード
データベースの文字コード:UTF-8 Unicode (utf8)その後、wp-includes/wp-db.phpおよびwp-includes/post.phpの上書きでは画面が真っ白になってしまうだけで解決できませんでした。
結果、Cool Big Boy様の投稿を参考にさせていただき
4.1にダウングレード(ロールダウン)したところ、無事に再開いたしました。
私も今後も4.2での回復を期待しフォーラムの情報をお待ちしております。
ありがとうございました。4.1.3の修正分(https://core.trac.wordpress.org/ticket/32051)をみると、まだXML周りで修正されてなくて、https://core.trac.wordpress.org/ticket/32090 を見ると、4.2.2(本日出ました)で修正されたように見えます。
これで直っているかは分かりませんが…
私が管理させて頂いているサイトも、ontenman様と同じ症状でした。
4.2.4 に更新してみたところ、
新規投稿、投稿、プラグイン、ウィジェットは問題なくなりましたが、
文字化けは相変わらずです。また4.2.4 で引き続き、
新規投稿や、投稿の編集時に日本語を入力して「公開」または「更新」ボタンを押しても、投稿画面に日本語が表示されません(日本語はすべて消えます)。以下の情報も、ontenman様と全く同じです。
- PHPのバージョン:5.2
- MySQLのバージョン:5.1
- サーバのサービス(レンタルサーバ or クラウド等):さくらのレンタルサーバ・スタンダード
- データベースの文字コード:UTF-8 Unicode (utf8)
バグが修正されたアップグレードのリリースを待っていたのですが、
かなり時間が経過してきて、これ以上更新ができないとそろそろ不都合が出てくるので、
ダウングレードで対処するしかないかなと考えているところです。@wakuchin さん
現在の WordPress の状況からして、多くの現象は理解できますが、一部不可解なところがありますので、もう少し情報をいただけると助かります。
phpMyAdimn を使う必要があるのですが、扱うことができますか? もし、できるなら、次の3つの情報がほしいです。
1. phpMyAdmin にログインして、SQL のタブをクリックすると、エディタの画面になります。そこに次の文を入力して、「実行」をクリックしてください。
SHOW VARIABLES LIKE 'character%';
出力された行をコピーしてください。
2. 同じく、今度は、下の文を入力して「実行」をクリックしてください。
SHOW VARIABLES LIKE 'collation%';
3. 同じく、今度は、下の文を入力して「実行」してください。「データベース名」のところは、その名前を、wp_posts のところは、wp-config.php で設定した「接頭辞」+posts となります。wp2_ のように設定してある場合は、wp2_posts となります。
SHOW CREATE TABLE データベース名.wp_posts;
出力が省略された形になることがありますので、全文が表示されていない場合は、印刷用画面にしてコピーしてください。必要なのは、最後の行だけですので、接頭辞など気になるようなら、最後の行だけ、お知らせいただいても結構です。
以上、よろしくお願いします。
kjmtsh様
ご助言どうもありがとうございます!!phpMyAdmin にログインし、SQLのタブで3つの文を実行してみました。
以下、ご報告致します。1.
SHOW VARIABLES LIKE 'character%';
Variable_name: Value
character_set_client: utf8
character_set_connection: utf8
character_set_database: ujis
character_set_filesystem: binary
character_set_results: utf8
character_set_server: ujis
character_set_system: utf8
character_sets_dir: /usr/local/share/mysql/charsets/2.
SHOW VARIABLES LIKE 'collation%'
Variable_name: Value
collation_connection: utf8_general_ci
collation_database: ujis_japanese_ci
collation_server: ujis_japanese_ci3.
SHOW CREATE TABLE データベース名.wp_posts;
Table: Create Table
wf_wp_posts: CREATE TABLEwf_wp_posts
(
ID
bigint(20) unsigned NOT NULL AUTO_INCREMENT,
post_author
bigint(20) unsigned NOT NULL DEFAULT ‘0’,
post_date
datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
post_date_gmt
datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
post_content
longtext NOT NULL,
post_title
text NOT NULL,
post_category
int(4) NOT NULL DEFAULT ‘0’,
post_excerpt
text NOT NULL,
post_status
varchar(20) NOT NULL DEFAULT ‘publish’,
comment_status
varchar(20) NOT NULL DEFAULT ‘open’,
ping_status
varchar(20) NOT NULL DEFAULT ‘open’,
post_password
varchar(20) NOT NULL DEFAULT ”,
post_name
varchar(200) NOT NULL DEFAULT ”,
to_ping
text NOT NULL,
pinged
text NOT NULL,
post_modified
datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
post_modified_gmt
datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
post_content_filtered
longtext NOT NULL,
post_parent
bigint(20) unsigned NOT NULL DEFAULT ‘0’,
guid
varchar(255) NOT NULL DEFAULT ”,
menu_order
int(11) NOT NULL DEFAULT ‘0’,
post_type
varchar(20) NOT NULL DEFAULT ‘post’,
post_mime_type
varchar(100) NOT NULL DEFAULT ”,
comment_count
bigint(20) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (ID
),
KEYtype_status_date
(post_type
,post_status
,post_date
,ID
),
KEYpost_parent
(post_parent
),
KEYpost_author
(post_author
),
KEYpost_name
(post_name
(191))
) ENGINE=MyISAM AUTO_INCREMENT=19605 DEFAULT CHARSET=ujisどうぞよろしくお願い致します。
@wakuchin さん
ありがとうございます。ほぼ予想どおりの結果ですが、たいへん重要な情報を得ることができました。
利用者が多い「さくら」がこの状況だとすると、わけのわからない不具合に遭遇している方がほかにも大勢いらっしゃるかもしれません。さっさとインストールし直してしまった方は問題がなくなりますが (たぶんです、必ずそうなるとは断言できません)、データベースのエクスポート・インポートで作り直すと、同じ状況を再現するだけになってしまいます。また、不具合にあっている方は、比較的古くから WordPress を使っているはずなので、より多くの投稿を抱えているはずですから、そう簡単に現在のサイトを作り直すわけにはいかない方も多いと思います。
検索してくる人の便も考えて、現在の状況をできるだけ説明しておきます。技術的なことが知りたい場合は、ticket をご覧ください (ここでは述べません)。なお、以下は私の個人的な見解であって、WordPress.org および ja.WordPress.org の公式見解ではありません。内部コードの読解は間違っていないと思いますが、保証はありません。結果について責任を負うこともできません。ご承知おき願います。
1. WordPress の状況
4.1.2 から最新の WordPress までの全バージョンで、MySQL のテーブルで使われている文字集合が、utf8、utf8mb3、utf8mb4、ascii、latin1 でない場合、サーバとのやり取りにテーブルの文字セットを使ってしまうという致命的なバグを含んでいます。途中のバージョンからは修正が入ったのですが、前のバグが直らず、もう一つ、サーバが32ビットシステムの場合、投稿本文とコメント本文、および、postmeta、usermeta などのテーブルの meta_value カラムに入力されるデータが0バイトになるという、こちらも致命的なバグを含むようになりました。
「さくら」はたぶん、32ビット FreeBSD なので、更新の結果が反映されないのは後者のバグのためです。
最初の修正を見ると、バグリポートの「意味」が伝わらなかったのかもしれません。状況がわかって、書き込みをするたびにデータベースに保存されたデータが破壊されることがわかったので、これはマズイと思い、急いだせいもあって、うまく文章を作れませんでした。再度バグリポートを出しましたが、まだ修正はありません。また、「意味」が伝わらないかもしれません。不具合であることは理解できていると思いますので、次回のリリースで何らかの修正が入るはずですが、「意味」が伝わらない場合、またやり直しになる可能性もあります。
2. wakuchin さんの状況
MySQL のテーブルは、ujis (EUC-JP) で作られています。調べたのは、wp_posts テーブルだけですが、他のテーブルも同じでしょう。しかし、WordPress と MySQL との通信には utf8 が使われています。wakuchin さんが MySQL は utf8 だと思ったのは、たぶん、wp-config.php の DB_CHARSET の値が utf8 になっているからだと思いますが、これはテーブルの文字集合ではありません。照合順序 (collation) は、WordPress 内部では、ujis_japanese_ci として扱われているはずです。
この状態だと、WordPress は、DB_CHARSET の値を無視して、ujis で強引に MySQL と通信します。かろうじて、ascii、つまり、英語のアルファベットだけでできているデータは同じ1バイトなので、入力できますが、日本語を含む UTF-8 の3バイトデータは全滅です。WordPress は、ログインしたとたんに、データベースへの書き込みが発生しますが、そのほとんどが ascii でできているので、新規投稿などのページ以外は正常に見えます。新規投稿のページでは、日本語のデータが通信に入るので、ここでユーザが異常に気付きます。
現在の不具合は、すでにデータベースに入力されている日本語には及びませんので、強引なことをしなければ、これまでの投稿などは破損していないはずです。フロントエンドでの表示などに不具合がないのは、データベースからの読み出しのときは、問題のある関数をデータが通らないからです。
3. 対応方法
PHP のバージョンが 5.2.x (「さくら」のサイトでは最後の番号が確認できませんでした) とのことですから、ちょっと気になっています。本来なら、オプションで変更できる 5.3 以上にしてくださいというところなのですが、複数の変更を同時に入れると、それ以降の不具合の特定が難しくなるので、今回に限り、PHP はそのままで、お願いします。うまくいかないときに、試してもらうかもしれません。
また、データベースを utf8 に移行することも、現時点では、保留させてください。失敗すると、これまでの投稿データが破損しますので、あまりうかつなことが言えないのです。最低限、テーブルの構造や投稿データが何バイト入っているかなどの情報を調べてからでないと、アドバイスができません。しかし、将来的には、いつか移行が必要になることは確かだと思います。移行のための手引きを準備することくらいのことはできるかもしれませんが。
さて、具体的な対処方法ですが、現状では、ファイルの一部を書き換える以外に方法がありません。変更するファイルは1つです。
- WordPress のバージョンを 4.2.2 にする。他のバージョンのファイルが混在しないように注意。
- wp-includes/wp-db.php をローカルにダウンロードする。
- wp-db.php をコピーして、片方をバックアップとして残し、もう片方を下のように修正する。
- 2686行目の
$queries[ $value['charset'] ][ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING binary ), %d ) USING {$value['charset']} )", $value['value'], $value['length']['length'] );
を
$queries[ $value['charset'] ][ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING binary ), %f ) USING {$this->charset} )", $value['value'], $value['length']['length'] );
に書き換える (2か所です)。同じく、2701行目からの、
if ( $charset !== $connection_charset ) { $connection_charset = $charset; $this->set_charset( $this->dbh, $charset ); }
の4行をコメントアウトするか、削除する。
- 修正した wp-db.php をサーバにアップロードし、上書きする。
- WordPress にログインして、新規投稿、更新を試す。
修正をするときには、使うエディタに注意してください。WordPress をインストールするときに、wp-config.php を編集したエディタなら、問題ありません。
実際のサーバを使っているわけではないので、他に不具合があるかもしれません。結果をお知らせいただけると助かります。要するに、人柱になってね、というお願いです。
kjmtsh様
さくらのスタンダードを使っており、WP4.2.2に更新後新規投稿ができず、過去記事の一部が壊れ、記事のリビジョンから復元もできずという状態でkjmtsh様の方法を試してみましたが、画面が白くなるだけで効果がありませんでした。取り急ぎCool Big Boyさんのやりかたでダウングレードしてしのいでおります。
取り急ぎ情報まで。ご報告、ありがとうございます。
古い版を使うのは、セキュリティ・ホールがあるので、お勧めではありませんが、強制はできません。できれば、コメントを受け付けないようにしていた方がよろしいと思います。
画面が白くなるのは、PHP の構文エラーなので、コードの書き間違いです。こちらからはどこを書き間違えているか知ることができません。編集をするなら、落ち着いて、慎重に作業してください。全角文字を使ったり、綴りを間違えたり、カッコや引用符の対応が間違えたりしただけでも動作しなくなります。また、Windows の場合は、メモ帳やワードプロセッサを使わないようにお願いします。
読みにくいかもしれないので、編集後、こうなっていてほしい形を、行を折り返して再掲します。書き換える場所は、
%d
を%f
に、$value['charset']
を$this->charset
に書き換えです。$queries[ $value['charset'] ][ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING binary ), %f ) USING {$this->charset} )", $value['value'], $value['length']['length'] );
コメントアウト部分は、各行頭に二つのスラッシュをいれます。
//if ( $charset !== $connection_charset ) { // $connection_charset = $charset; // $this->set_charset( $this->dbh, $charset ); //}
kjmtsh様
引き続きご助言頂きまして、どうもありがとうございます!!
PHPとMySQLのバージョンが古い件、
私も気になっていたのですが、今回は更に複雑な事態を招きそうでしたので、そのままにしております。ご提案いただきました、wp-db.php の書き換えと、上書きを行いました。
その結果、日本語の入力と表示について、
新規投稿、既存投稿の編集ともに、全く問題がなくなりました!!!今回のWordPress の一連の不具合について、kjmtsh様のご見解通りだと思われます。
この線で、WordPress の修正版がリリースされますように。
取り急ぎ、お礼とご報告をさせていただきます。
なお、この件が一件落着しましたら、
PHP と MySQL のバージョンアップを行いたいと思います。
その節はまたアドバイス頂けましたら幸いです。
どうぞよろしくお願い致します!すいません。
全くの初心者なのですが、私も新規投稿ができなく、題名までは記入できるのですが、本文を入れようとしてもカーソルすら出てこない状況です。
アドバイスいただけないでしょうか?」新規にトピックを作成を作成してください。
- トピック「新規投稿等すべての更新が出来ない。」には新たに返信することはできません。