こんにちは。たきもとです。
先日からVCCWとWP基礎本でテーマ作成にチャレンジしているのですが、早速ハマリました。
今回は 管理画面\外観\ヘッダーで Catchable fatal error が出現したときの解決方法を紹介します。
先日書いたvccw + 基礎本に着手したキッカケについての記事はこちら。
初心者がvccw環境でWPテーマ作成の基本を身に付ける話 | たきもとけんご.com
動作環境
特に記載のない限り、今後wp_theme開発環境は次の状態を踏襲します。
// OS
Windows 8.1 / 64bit
// ブラウザ
Google Chrome 51.0.2704.103 m (64-bit)
// vccw周り
こちらの記事を参照。
windows8.1にvagrant,VCCWでWordPressローカル開発環境を構築する方法 | たきもとけんご.com
- CentOS 6.5
- PHP 5.4
- MySQL 5.5
- Apache
結論
先に結論ですが、次のファイルを編集すればこのerr.は消えます。
// 次のファイルを編集 www\wordpress\wp-config.php // 次の箇所を編集 define( 'WP_HOME', 'http://vccw.dev' ); // 自分がアクセスしているホスト名に変更する define( 'WP_SITEURL', 'http://vccw.dev' );//自分がアクセスしているホスト名に変更する
私は hostsファイル を編集していたのでこのエラーにハマったようです。
以下、私のデバッグ過程を紹介します。
現象
次の本の通り進めていたら、p58で次のようなエラーが出現しました。
『本格ビジネスサイトを作りながら学ぶ WortdPressの教科書 Ver.4.x 対応版』
Catchable fatal error: Object of class stdClass could not be converted to string in /home/fx-takimoto/kengotakimoto.com/public_html/wp-content/plugins/dynamic-hostname/dynamic-hostname.php on line 80
さて、困った。
手がかりは
dynamic-hostname.php
の80行目しかないので、一先ずこのファイルを見に行きました。
解決策
基本的なデバッグ方法は次の通りです。
- エラーメッセージを頼りにファイルを確認
- 怪しそうな箇所をググる
エラーメッセージを頼りにファイルを確認
上記該当箇所は次の通り。
debug ら辺は私が書き加えたので無視して下さい。
public function replace_host_name($uri) { if ($this->get_default_hostname() !== $_SERVER['HTTP_HOST']) { return str_replace($this->get_default_hostname(), $_SERVER['HTTP_HOST'], $uri); //debug echo '$this->get_default_hostname() = '.$this->get_default_hostname(); echo '$_SERVER[\'HTTP_HOST\'] ='.$_SERVER['HTTP_HOST']; } else { return $uri; } }
このメソッドはホスト名を置き換える動作をしているようです。
つまり、自分の環境でホスト名がイケてないよ、と怒られているってことです。
怪しそうな箇所をググる
じゃあ、ホスト名の設定ファイルはどこなんだい?
ということでググってみました。
参考になったのは次の記事。
Dynamic Hostname | WordPress.ORG
ここで質問していた方も同様の現象にハマッていたようなので参考になりました。
回答者によると、Dynamic Hostnameとやらはwp-config.phpで設定するらしい。
そんな訳で、そのファイルを探して先述した変更を加えて解決しました。
ファイルの場所は次の通り。
\www\wordpress\wp-config.php
原因は私がhostsファイルを変更していたから
ローカル環境で動作確認する際、ぶらうざのurlバーに
192.168.~~~
と打ち込むのは面倒です。
だから私はhostsファイルでこの文字列を変更していました。
先述したものを再掲しますが、vccwでローカル開発環境構築を行った場合、host名はvccw.devになっています。
// 次のファイルを編集 www\wordpress\wp-config.php // 次の箇所を編集 define( 'WP_HOME', 'http://vccw.dev' ); // 自分がアクセスしているホスト名に変更する define( 'WP_SITEURL', 'http://vccw.dev' );//自分がアクセスしているホスト名に変更する
これが原因でuriの書き換えに失敗していたようです。
エラー解決前後の画面
最後に、このエラー解決前後の画面表示を紹介します。
まず、解決前。
次に、解決後。
まとめ
デバッグ方法を身に付けることが目的達成への近道
初めてPHPやMySQL, R, JavaScript等を触った時も同じことを感じていました。
やはり、デバッグ方法を身に付けるって大切だな、と。
今回の私のデバッグ手順をまとめると次のようになります。
- エラー内容の該当ファイルを見てみる
- echo, var_dump で該当箇所をブラウザに表示してみる
- vagrantの設定時に自分がやった事を思い出してみる
- きっとパスが通ってないんだろうなぁ、と疑ってみる
- エラー内容でググッてみる
- それらしいページがヒットしたら、そのページ通りに試してみる
上記4点目については経験則です。
パスが通っていない、なんてザラにあるので。
私が新しく何かを始めるときにまず最初に疑うのは パス です。
ググるときは英語の方が早く答えが見つかる
プログラミングをするときは英語でググりましょう。
日本語で親切にまとめてくれているブログ・サイトを探すよりも圧倒的に早く答えが見つかります。
これは至って当然のことで、海外と日本を比べると
- 英語を操る人の数も
- プログラミングを嗜む人の数も
断然海外の方が多いです。
日本語でググる = 親切にブログ/サイトにまとめている少数の日本人を探す
という事ですので。
情報収集効率を上げたいのなら英語は必須です。
私も英語は得意じゃありませんが、情報収集の点で身に付けざるを得ない状況です。
私の下手くそな英語にもっと磨きをかけねば。
今回は以上です。