ワードプレスをアップデートしました。
ところが、いきなり警告オンパレード・・・・どうやら、トリガーエラーと呼ばれるものらしい。PHPプログラムについては、コミュネスの経営者の鶴岡駅前でプログラム教室をやってるパソコンドクターでかれこれ3年近くPHPを学んできたので、今回のことは自分でソースを読んで理解することができました。
でも、不安もあるのでPCドクターやコスモス(パソコン教室の講師の先生)にも相談したりしてきました。鶴岡駅前パソコンショップ「コスモス」の講師はドクターのお弟子さんですが、某市立高校のITの先生も、パソコンドクターさんのお弟子さんだったりします。先生を教えてらっしゃる先生ですね。
さて、本題ですが、エラー条件をまとめてみました。
・FTP接続が関係する場合
・SSLなしのノーマルFTP接続の場合
・コアアップデートやテンプレート、プラグインなど、FTPを経由する作業
この3つの条件に当てはまる場合、ワードプレス3.7以降の「wp-include/update.php」のソースに書かれているように、勝手にノーマルFTPを強制的にhttps「SSLつき」のFTP接続にしなさい、という命令が書き込まれていました。ですから、SSLプランで運営する分には何もエラーは表示されません。コミュネスの「SSL在りサーバープラン」も本件におけるワードプレスのエラーは吐かないことは確認済みです。
Warning: 予期せぬエラーが発生しました。WordPress.org かこのサーバーの設定に何か問題があるかもしれません。問題が続くようであれば、サポートフォーラムを参照してみてください。 (WordPress は WordPress.org との安全な接続を確立できませんでした。サーバー管理者にご連絡ください) in /algon/xeon/clusterserver/mainframe0068/httpdocs/honoka/wp/wp-includes/update.php on line 119
こんな感じのエラーが3つほど表示されて画面を汚染してくださいます。もちろんサーバーには何も問題はなく、SSLなしプランで契約して利用させて頂いていますので、SSLなし標準コース。 よっぽど自分でCERTサーバーでも作らない限り、セキュリティぼろもれのSSL事情で、それこそ年間10万円以下の腐った共有SSLなんて使えば、むしろ逆にパスワードやお問い合わせフォームの個人情報を「盗んでくださいよ」と言わんばかりのサイトになってしまいますから、SSLなし標準コースで正しく利用させて頂いています。(ましてや個人のブログですしね)
さて、対策方法は、/wordpress/wp-includes/update.phpの以下の3ヶ所をコメントアウトすれば解決です。コアユニットが関数wp_http_supportsによって、勝手にssl宣言してくれて、ssl無しでサーバー契約している安全なサーバーでさえ、強制的にSSLありモードとして誤解析しているだけに過ぎない、ということで、専門プログラマーやサーバー設計開発者の回答も得ることができました。
別に、レンタルサーバーだからって、SSLがあって当たり前とかいうウサンクサイ常識でコアユニットを開発されては、本当の安全を考えれば、そんなマユツバ発想は辞めて欲しいと思ったりしました。そんなこんなでワイワイ盛り上がりました。
対策方法 [/wordpress/wp-includes/update.php]
??? if ( $ssl = wp_http_supports( array( ‘ssl’ ) ) )
$url = set_url_scheme( $url, ‘https’ );↓↓↓
//?? ?if ( $ssl = wp_http_supports( array( ‘ssl’ ) ) )
//?? ??? ?$url = set_url_scheme( $url, ‘https’ );
よくみると3ヶ所ほどありますので、3ヶ所ともコメントアウトすれば結構です。もっとも、set_url_schemeの「https」を「http」に3か所とも変更するのもOKだそうです。サーバー契約で「SSLなしスタンダードコース」などであれば、これを修正すればワードプレス3.7~3.9におけるFTP警告バグは対策できるとのことでした。
ワードプレスでSSLを使うことは、逆に閲覧者や管理人を危険にさらす、という内容で、わかりやすく書かれている方がおられましたので、ご紹介させて頂きますね。
危険性を納得せざるを得なくなった
http://www.imamura.biz/blog/cms/wordpress/2706
まさに記事の通りですね。せっかくブログにお越し頂いたお客様を逆に地獄のSSLにブチ込むところだったわけです。SSLは危険!やるなら自前でCERT認証サーバーを公的に組み上げる、またそうした独立CERTのSSL認証サーバーを提供しておられるレンタルサーバーを借りる(月額10万円はしますが)ということでファイナルアンサーですね。
レンタルサーバーだからといって、SSLがあれば優秀ではなく、SSLが無く、SSL拒否を正しくサービスしてくれるワードプレスがむしろ安全でSEO的にも情報評価も高くなる。
勝手にワードプレスのコアに、バージョンアップと称して、SSLなしFTPを誤判断してSSLありにしてhttpsを付与してしまうコアハードコーディングのアップデートは止めてほしいものですね。
それこそ、そうしたカスタマイズ問題はwp-config.phpに書かせるべき選択の性質だと、コミュネスを生み出したプロのサーバー設計者チームの先生たちもおっしゃていました。なるほど、納得です。
なんと、実はここだけでなく、プラグインでも同じように1か所ありますので対策しておきましょう。SSLでFTP接続を指定していない場合でも、無理やりSSLで通信しようとしてエラーが立て続けに表示されまくる凡ミスなバグです。かなりウザいですし、なにより15秒づつSSLネットワーク失敗のトライが出ますから、しばらくアップデートを放置しておいたりするとアップデートが溜まってしまっていて、1プラグインごとに15秒づつ待たされますから、20もプラグインを入れていれば300秒つまり5分も待たされることになります。
もちろん、ただのバグですし、FTP選択でしっかりと「SSLなし」を選んでいるわけですから、「望まない処理機構」が動作する、つまりバグです。問題の個所は以下の通りです。
Warning: 予期せぬエラーが発生しました。WordPress.org かこのサーバーの設定に何か問題があるかもしれません。問題が続くようであれば、サポートフォーラムを参照してみてください。 (WordPress は WordPress.org との安全な接続を確立できませんでした。サーバー管理者にご連絡ください) in /Users/ftp/VirtualUsers/cocoshop/wp/wp-admin/includes/plugin-install.php on line 77
以下のように対策してください。
[/wordpress/wp-admin/includes/plugin-install.php] 64~65行
?? ???? if ( $ssl = wp_http_supports( array( ‘ssl’ ) ) )
$url = set_url_scheme( $url, ‘https’ );↓↓↓
// ? ???? if ( $ssl = wp_http_supports( array( ‘ssl’ ) ) )
// ? ??? ???? $url = set_url_scheme( $url, ‘https’ );
ここは1か所のみです。(64~65行の2行)
もちろん「SSL」を選択しているのであれば、この処理に突入するのは必然ですが、SSLなしを選択していて強制的にSSLによる接続トライを試みられるのは話が違いますし、望まない処理やエラーによって気持ち悪く感じます。
以上です。お疲れ様でした。
追伸です。
この件でパソコンドクターからアドバイスを受けてきました。
実は別の点で、htaccessでエラーログの設定もチェックした方がいいとのことでした。
.htaccess
php_flag display_errors On
この行をコメントアウトする。またはOffにする。ここがOnのままだと、上記のようにソースで強制しないとダメになるそうですが、サーバーによってはここをOffにするだけでエラー警告(トリガーエラー)が消えるレンタルサーバーもあるというアドバイスでした。
1、先にhtaccessでエラー設定の状況をチェックする
2、それでもダメならPHPでhttpsの強制化を解除する(本文参照)
という流れになるようです。