MacでWordpressを動かそうとしたらMAMPを入れると簡単にできるというが、それなりにWordpressを動かすまで設定するのは面倒臭い
そこでPHP5.4からサポートしたPHPビルトインサーバの登場だ
こんな感じで、ホスト名とポートを指定してやればローカルサーバ立ち上がり、PHPが実行可能になりブラウザから動作を確認することが出来て超便利
php -S localhost:8000
さてこの超便利なビルトインサーバなんですが、Wordpressをローカルで立ち上げるようなMySQLに接続することをやらせようとすると、どうもDB接続エラーが出る。
MySQLに接続するDB名や、ユーザ名、パスワードはあっているのに、接続エラー出てしまう
簡単なDB接続するPHPのコードでもエラーが発生してしまう。
原因を調査すると、MySQLをHomebrewでインストールしている場合、このような現象が発生していることがわかった。
PHPのMySQL接続用のソケットを確認する
現在動いているMySQLの接続用のソケットを格納する
# MySQLソケットプロセスの場所を確認
> mysql_config --socket
/tmp/mysql.sock
/tmp.sysql.sock で実行している
PHPの接続しているMySQLソケットプロセスの場所を確認
PHPはMySQLの接続ライブラリを組み込みで持っていて、少なくとも素のWordPressではこいつを利用してDB接続しているようだ
PHPが接続詞しに行くMySQLソケットプロセスの場所を確認する
> php -i | grep socket
mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysqli.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
pdo_mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
とこのように、見に行くソケットが違うためPHPがMySQLに接続できないことがわかる
- /tmp/mysql.sock
- /var/mysql/mysql.sock
PHPのMySQL接続ソケットの場所を変更する
PHPの設定ファイルの位置を確認する
以下のファイルを作成してビルトインサーバを起動する
<?php
phpinfo();
?>
> php -S localhost:8000
ブラウザでlocalhost:8000/info.phpにアクセスし、
Loaded Configuration Fileの項を確認する
オレの場合は空だったので、デフォルト値を見ていることになるだろう。
PHP設定ファイルの作成
/etcディレクトリにはphp.ini.defaultと言うファイルがあり、デフォルト設定があるのでとりあえずこれをコピーし、必要部分書き換える
sudo cp /etc/php.ini.default /etc/php.ini
sudo emacs /etc/php.ini
以下の設定箇所の=の右側にHomebrewで入れたMySQLが作るソケットプロセスのパス'/tmp/mysql.sock'を入れてやる
mysql.default_socket = '/tmp/mysql.sock'
mysqli.default_socket = '/tmp/mysql.sock'
pdo_mysql.default_socket = '/tmp/mysql.sock'
もう一度PHPのMySQL接続するソケットプロセスの場所を確認すると、変更されていることがわかる
> php -i | grep socket
mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
mysqli.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
あとはビルトインサーバでもWordpressが動くぜ。これでも動かなかったらMysqlの設定か、DB接続情報が間違っているはず