エクステンションを有効にしてビルドに挑戦!:仕事で使える魔法のLAMP(28)
今回からは、エクステンションを有効にしてPHPをビルドしてみます。よく使うエクステンションのビルド法を知っておけば、それだけでかなり役に立つでしょう(編集部)
現実にはエクステンションが必要ですよね
第25回からPHPのビルドとテストの解説を続けてきました。前回までは、話を簡単にするためにエクステンションは無効にしてビルドしていました。今回からはいよいよエクステンションを有効にしてビルドしていきます。前回までの内容で、基本的なビルド方法と、テストの実行方法、そしてその結果の見方を解説しました。あとは、個々のエクステンションそれぞれの事情を押さえれば、PHPのビルドに必要な知識の大部分を押さえることができます。
PHPのエクステンションは、マイナーなものを含めると150以上あります。「面倒だからすべて有効にしてしまえ!」というわけにはいきません。何も考えずに大量のエクステンションを有効にすると、ライブラリの不足が多発して面倒なことになります。
というわけで、今回からは利用頻度の高いエクステンションを選んで、そのエクステンションのビルドに関する解説をしていきます。
エクステンションの一覧はPHPマニュアルサイトの付録で確認できます(図1)。いくつかの中核となるエクステンションは無効にできず、必ず組み込まれるようになっています。
リンクするライブラリに注意する
エクステンションを有効にするときは、そのエクステンションを利用するために必要な外部のソフトウェアやライブラリ、そしてPHPに同梱のソフトウェアについて注意しなければなりません。
これまでの解説で述べた通り、外部のソフトウェアが必要ならば、あらかじめそのソフトウェアをインストールしておかなければなりません。これについては基本的にはビルドせず、CentOSのものを使うことにします。
同梱のソフトウェアは、第20回で説明したようにトラブルの元になることがあります。PHPはApacheに組み込むモジュールの1つですので、ApacheやそのほかのApacheモジュールがリンクしているライブラリと同じものがPHPに同梱されているときは、これを使わないようにします。
mbstringでマルチバイト文字に対応
まずは文字列関連のエクステンションから選んでいきます。PHPは中核となるコア機能だけでは日本語を含むマルチバイト文字に対応していません。そこで必要になるのがmbstringエクステンションです。エンコーディング(文字コード)の変換や、マルチバイト文字で正規表現を使ったマッチングなどができるようになります。これを有効にするには「--enable-mbstring」をconfigureスクリプトに指定します。
mbstringは外部のソフトウェアを必要としませんが、必要なライブラリはPHPに同梱されています。libmbflというライブラリなのですが、PHP同梱のものを使わず、外部のものを使うときは「--with-libmbfl」を指定します。もう1つ、onigurumaという正規表現のためのライブラリも同梱しています。同梱のものを使わないときは「--with-onig」と指定します。
これらのPHP同梱ライブラリはApacheやApacheモジュールで使うことはまずないでしょうから、衝突する心配はありません。エクステンションを利用するときに必要になるのならば、同梱のものをそのまま利用すればよいでしょう。つまり上記の「--with」指定は2つとも不要です。
同じようなエクステンションとして、エンコーディングを変換する機能を持つiconvエクステンションもあります。こちらは何も指定しなくても標準で有効になります。意図的に無効にするには、「--without-iconv」を指定します。
intlで国際化に対応
mbstring同様に多言語を扱うために必要なエクステンションとして、intlがあります。Unicode文字列を扱ったり、国際化対応するためのエクステンションです。このエクステンションはlibicuという外部ソフトウェアが必要になりますので、次のようにしてパッケージをインストールします。
$ sudo yum install libicu-devel
エクステンションを有効にするには「--enable-intl」を指定します。さらにlibicuのインストール場所を指定するために「--with-icu-dir」を使うこともできます。この連載では、パッケージを使って標準の場所にインストールしているので、こちらの指定は必要ありません。
ほかにも、似たようなエクステンションとしてgettextがあります。gettextはPHPに限らず広く利用されている、メッセージ等を多言語化するためのものです。外部のライブラリの名前も、エクステンション名もgettextなので、区別するためにエクステンションの方はgettextエクステンションと呼ぶことにします。ほかにもこのように外部のライブラリの名前がそのままエクステンション名になっていることがありますが、同じように呼ぶことにします。
gettextは外部のライブラリですので、次のようにインストールしておきます。
$ sudo yum install gettext-devel
gettextエクステンションを有効にするには「--with-gettext」を指定します。
PCREライブラリを使った正規表現
PCREは第20回にも登場した、Perl互換の正規表現を扱うためのライブラリです。このライブラリを使うためのPHPのエクステンションが、PCREエクステンションです。同じ名前なので、エクステンションの方は常にPCREエクステンションと呼ぶことにします。
mbstringでもマルチバイト文字の正規表現が使えますが、PCREでもUnicode文字列の正規表現が使えます。このように一部機能が重複しているあたりがPHPらしいと言えるでしょう。
PCREエクステンションは標準で有効なエクステンションであり、なおかつ必要なソフトウェアであるPCREが同梱されているエクステンションです。何も指定しなければそのまま同梱のPCREを使ってビルドすることになります。
これは第20回と同じような状況です。ApacheとPHPがそれぞれPCREを必要としているのに、そのままビルドするとリンクしているライブラリのファイルが異なることになってしまします。ApacheもPHPも同じPCREにリンクしていなければなりません。そこでPHPで使うPCREは、PHP同梱のものではなく、パッケージでOSにインストールしたものを使うことにします。
従って、PHPのビルドでも同梱のものを使わないように指定します。そのためには「--with-pcre-regex=/usr」とします。標準のディレクトリにPCREがある場合であってもこのように「/usr」を明示的に指定する必要があります。
マニュアルにはこの引数の説明しかないのですが、実際にconfigureスクリプトのヘルプを見ると、ほかにも「--with-pcre-dir」という引数があります。
(略) --disable-filter Disable input filter support --with-pcre-dir FILTER: pcre install prefix (略)
こちらはPCREエクステンションではなく、filterエクステンションで使うものということです。この引数も指定しておきましょう。なお、filterエクステンションも標準で有効になっているエクステンションです。
configureスクリプトはこうなる!
ここまでの内容をまとめると、configureスクリプトのコマンドラインは次のようになります。
./configure \ --prefix=/opt/php-5.3.8 \ --with-apxs2=/opt/apache-httpd-2.2.21/bin/apxs \ --enable-mbstring \ --enable-intl \ --with-icu-dir=/usr \ --with-gettext=/usr \ --with-pcre-regex=/usr \ --with-pcre-dir=/usr \ 2>&1 | tee configure_log.txt
「--with-pcre-regex」以外は「/usr」を明示する必要は無いのですが、明示した方がどこのライブラリを使っているかはっきりしますし、全体で統一する意味もかねてこのようにしました。
テストを実行すると、intlエクステンション関係のテストにいくつも失敗していますが、前回のようにPHPのQAサイトを見ると同じような失敗が多く並んでいます。ビルドの失敗というような大きな問題ではないでしょう。libicuのバージョンに起因するのではないかと予想しています。最新のlibicuであれば改善するかもしれません。
次回も引き続き、よく使うエクステンションの解説を進めます。
- CMakeでMySQLをビルドしてみる
- MySQLのビルドに欠かせないCMakeを準備する
- いよいよMySQL編、ソースからビルドすべきか?
- PHPでセッションを利用するための設定
- クライアントがアクセスできる範囲を制限する
- エラーメッセージをどう扱うか?
- ファイルのアップロードを制限する
- リクエストデータを受け取る変数の扱い
- マジッククオート機能には頼らない
- 安全を考えてPHPの実行時設定を調整する
- Apacheの設定ファイルでPHPの設定を変える
- PHPの設定ファイルを作って配置してみる
- PHPスクリプトを実行できるようにする準備
- PHPエクステンション組み込みの仕上げ
- 単純なデータを管理するDBMを使えるようにする
- エクステンションの組み込み状況を確認する
- PHPでデータベースを使う準備をする
- XMLを処理できるようにする
- エクステンションを有効にしてビルドに挑戦!
- PHPテスト失敗の原因を追究する
- 早速PHPをビルド! そしてテスト!
- PHP編に突入! まずはソースをダウンロード
- 設定ファイルを作成してApacheを動作させる
- 設定ファイルや公開ドキュメントの配置を考える
- 1つのサーバに複数の仮想サーバ?
- Apacheの設定ファイルを記述する前に
- サードパーティのApacheモジュールをビルドする
- 認証DBにアクセスするライブラリを組み込む
- Apache同梱ソフトウェアに引数を渡してビルド
- OpenSSLをビルドしてApacheで利用する
- proxyやsslのモジュールを使ってみる
- ライブラリが足りなくてビルドできないときは?
- Apache HTTP Serverのビルドを始めよう
- configureでソフトウェア固有の設定を変更してみる
- configureの設定を変更してみる
- 配布パッケージの中身と、configureの役目を知る
- ダウンロードファイルが真正なものであるかを確認
- Makefileをいろいろ書き換えながらビルドしてみよう
- makeを使ってソフトウェアをビルドしてみよう
- ダイナミックリンクとスタティックリンク
- 「ビルド」という作業は何を指しているのか
- 公開鍵認証でsshを安全に使う
- sshを便利にする公開鍵暗号
- アクセス制限の設定とCentOSのアップデート
- サーバに接続して、一般ユーザーのアカウントを作る
- LAMP環境、自分で作りませんか?
Copyright © ITmedia, Inc. All Rights Reserved.