こんばんは、 @dz_ こと大平かづみです。
Prologue - はじめに
Bluemix の Cloud Foundry アプリで、PHPスターター・アプリケーション を利用して WordPress を立てようとした際、 mysql_connect()
がないよ!と不意打ちなエラーにつまずきましたので、対処したメモを残しておきます。
Bluemix PHPスターター・アプリケーションについて
Bluemix の PaaS は、Cloud Foundry をベースとしており、PHP ランタイムの構築には php_buildpack が採用されています。
ビルドパックを利用することで、手間なく環境を構築してくれるメリットとともに、基本の構成からカスタマイズするには、少し工夫が必要です。
PHP拡張について
php_buildback
は、デフォルトの場合、 bz2
, zlib
, curl
, mcrypt
などの最小限の PHPエクステンションをインストールします。
ここに含まれていないPHPエクステンションを利用したい場合は、明示的に含める必要があります。この記事では、追加の PHP エクステンションを指定する方法をまとめます。
Bluemix PHPスターター・アプリケーションで、 mysql_connect()
がない場合の対処
エラー内容
Bluemix PHPスターター・アプリケーションを作成し、 WordPress のソースコードを配置して動かそうした際、下記のエラーが発生しました。
Fatal error: Call to undefined function mysql_connect() in /home/vcap/app/htdocs/wordpress/wp-includes/wp-db.php on line 1568
原因
Bluemix PHPスターター・アプリケーションのビルドパックには、どうやら mysql_connect()
を含む mysqli
のPHPエクステンションが含まれていないようです。
対処
PHPエクステンションを設定するには、 options.json
に指定します。
まず、Bluemix が必要とする最小の options.json
は以下のようです。Bluemix では、少なくとも WEBDIR
を指定する必要があります。また、上記のデフォルトの options.json
に指定されているPHPエクステンションもピックアップしておきます。
{
"WEBDIR": "htdocs",
"PHP_EXTENSIONS": ["bz2", "zlib", "curl", "mcrypt"],
}
ここに、必要なPHPエクステンションを追加します。どんな拡張モジュールが利用できるかは、下記の options.json
を参照してください。
- 指定可能な zend エクステンション、PHPエクステンションoptions.json (PHP5.x)
- 指定可能な zend エクステンション、PHPエクステンションoptions.json (PHP7.x)
たとえば、 mysqli
を追加する場合はこうなります。
{
"WEBDIR": "htdocs",
- "PHP_EXTENSIONS": ["bz2", "zlib", "curl", "mcrypt"],
+ "PHP_EXTENSIONS": ["bz2", "zlib", "curl", "mcrypt", "mysqli"]
}
そして、これをアプリケーションのディレクトリに .bp-config/options.json
として配置しデプロイすることで適用されます。
ということで、PHPエクステンションを追加するのは、実はこんなに簡単でしたー!(o'ω')ノ
Epilogue - おわりに
当初、エラー発生時は諦めそうになりましたが、解決策がわかって、Cloud Foundry の仕組みもわかって一石二鳥でした♪