WordPressでローカルから本番サーバーにあげたときに接続エラーになった理由

Apr 29, 2013

接続エラー

今回はWordPressで実際に仕事で私自身が陥った問題について取り上げたいと思います。

背景

仕事ではWindows環境で作業を行なっており、XAMMPでローカル環境を構築しています。
WordPressはローカルでインストールし、本番サーバーにはwp-contentフォルダと同階層のものをFTPであげています。←今回の肝はここです。データベース(以後 DB )も準備し本番環境を整えています。

我々はローカル環境から本番環境に移す際、主にwp-config.phpとローカルDBのsqlファイルの書き換えを行なっています。変更箇所は以下の通りです。

wp-config.php

/** WordPress のデータベース名 */
define('DB_NAME', 'データベース名');

/** MySQL のユーザー名 */
define('DB_USER', 'ユーザー名');

/** MySQL のパスワード */
define('DB_PASSWORD', 'パスワード');

/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', 'ホスト名');

ローカルDBのsqlファイル

phpMyAdminのDBをエクスポートをします。パス等がローカル用になっているのでこれを一括置換で本番用に変えます。

例)http://任意のパス/wp-contenthttp://任意のURL/wp-content

データベース接続確立エラーの表示

上記の2つのファイルを変更したら、そのまま本番サーバーにあげます。表示確認をしてめでたしめでたし。
となるはずだったのですが、今回アップしたサイトにアクセスすると「データベース接続確立エラー」とでかでかと表示されます。

データベース接続確立エラー

これも何回もあげていれば、たまにこういう場面に出くわすことがあります。エラー原因は先程変更した2つのファイルのどちらか、ということが多かったので今回もそうかと思い、再度チェックしました。が、すべて合っています。どういうことなのかと思い、今度はWinMerge(Windows用Diffソフト)で差分を見てみました。

エラーの原因が見つかりました。

認証用ユニークキー

エラーの原因はwp-config.phpの52行目あたりにある認証用ユニークキーの設定がされていなかったからでした。

認証用ユニークキーとは

ユーザの Cookie に格納される情報をより強固な暗号化によって守るためのものです。
秘密鍵(シークレットキー)と言われるランダムなパスワードを設定することによってサイトへの不正アクセスや侵入・改竄を難しくします。

define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

今回は秘密鍵のところが”put your unique phrase here”となっていました。つまり、秘密鍵が設定されていないということです。秘密鍵を設定し、再度本番サーバーにアップするとちゃんと表示されるようになりました。

ちなみに

今回設定したランダムなパスワードはソース内に書かれているhttps://api.wordpress.org/secret-key/1.1/salt/というところで自動生成してくれるので気に入るパスワードがでるまで更新ボタンを押しつづけてみてはいかがでしょうか?