Check! Bluemix PHPランタイムでPHPエクステンションを追加したいときは?

  • 5
    いいね
  • 0
    コメント

こんばんは、 @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エクステンションもピックアップしておきます。

.bp-config/options.json(デフォルト)
{
    "WEBDIR": "htdocs",
    "PHP_EXTENSIONS": ["bz2", "zlib", "curl", "mcrypt"],
}

ここに、必要なPHPエクステンションを追加します。どんな拡張モジュールが利用できるかは、下記の options.json を参照してください。

たとえば、 mysqli を追加する場合はこうなります。

.bp-config/options.json(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 の仕組みもわかって一石二鳥でした♪