XMLを処理できるようにする:仕事で使える魔法のLAMP(29)
プログラムを作るとき、何かとXMLの処理が必要になります。今回は、XML処理を可能にするエクステンションを追加してconfigureしてみます(編集部)
コマンドラインでPHPを使えるようにする
前回から、PHPのエクステンションのなかでもよく使われるものを選んで、1つずつ有効にしていく作業について解説しています。前回は主に文字列処理関連のエクステンションについて解説しました。
文字列の取り扱いはプログラミングにおいて基本的な要素ですので、前回有効にしたモジュールはどのような場合でも有効にしておくのがよいでしょう。もちろん、使わないことがはっきりしている場合は無効にしても問題ありません。要らないものを外せるのも、自分でビルドするメリットです。
引き続き今回も主要なエクステンションを有効にする方法を紹介していきます。1つ目はreadlineエクステンションです。その前に、PHPのコマンドライン版について解説をしなければなりません。
PHPはWebアプリケーションを作るための言語ではありますが、コマンドラインインターフェイス(以下CLI)もあります。CLIは標準でビルドされるもので、configureスクリプトで無効にすることもできます。PHPでバッチ処理や、コマンドライン用のアプリケーションを記述することもできるのです。
いずれの場合もアプリケーションの実行環境として利用しているわけですが、それとは別に、ちょっとしたPHPコードを入力して動作を確認したりすることもできるようになっています。一般に、このような目的で使うモードを、インタラクティブシェル、対話シェルなどといいます。
「シェル」と名前が付いているので、bashなどのシェルと同じように対話的に振る舞います。シェル上ではコマンドを入力して結果を得るという操作をしますが、その代わりにコードを入力するとその結果が即座に得られるようになっています。インタラクティブシェルは多くのスクリプト言語に備わっている機能です(図1)。
$ python Python 2.4.3 (#1, Sep 21 2011, 19:55:41) [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> test = 'Test' >>> print(test.upper()) TEST >>>
さて、本題に戻ります。readlineエクステンションを有効にすると、CLIのPHPでインタラクティブシェルが使えるようになります。readlineエクステンションにはreadlineライブラリが必要ですので、次のようにして「readline-devel」パッケージをインストールします。
$ sudo yum install readline-devel
configureスクリプトには「--with-readline」を指定します。これでビルド、インストールした後、インストールディレクトリにある「bin/php」コマンドに「-a」という引数を指定して起動すると、インタラクティブシェルになります(図2)。
/opt/php-5.3.8/bin/php -a Interactive shell php > $test = 'Test'; php > echo strtoupper($test); TEST php >
インタラクティブシェルではカーソルキーによるカーソル移動や入力履歴の呼び出しが可能です。さらに、コード補完機能も利用できます(図3)。
php > php【ここでタブキーを押す】 php_egg_logo_guid php_real_logo_guid php_user_filter php_ini_loaded_file php_sapi_name phpcredits php_ini_scanned_files php_strip_whitespace phpinfo php_logo_guid php_uname phpversion php > php
前述の通り、インタラクティブシェルはちょっとした動作確認などによく使います。開発者がコード片を実験するのに使うというのがよくある利用シーンですが、インフラエンジニアにも便利なものです。ビルドしたはずの機能が正しく使えているか、データベースとの疎通確認など、トラブルシュートの道具として積極的に活用していきたい機能です。
XML処理に関連するエクステンション
XMLはご存じの通り、さまざまな場面で利用できる重要なテキストフォーマットです。現在では多くのプログラミング言語で扱えるようになっています。PHPも例外ではなく、XMLを扱えます。
PHPをXMLに対応させるにはいくつかのエクステンションが必要です。その中で最も重要なのが、libxmlエクステンションです。libxmlエクステンションは、その名の通りlibxmlという外部のライブラリを使うためのエクステンションです。
libxmlエクステンションは標準で有効になっています。つまり、libxmlがインストールされていない環境では、configureスクリプトの実行に失敗します。前回、最後にまとめたconfigureのコマンドラインも、libxmlが無い環境では失敗していたはずです。筆者の環境では第20回でサードパーティのApache HTTP Server(以下Apache)モジュールをビルドするために、「libxml2-devel」パッケージをインストールしていましたので、前回の時点でも失敗しませんでした。まだ「libxml2-devel」をインストールしていない場合は次のようにインストールしてください。
$ sudo yum install libxml2-devel
libxmlの場所を指定するには、「--with-libxml-dir」を使います。この引数にはディレクトリを指定するのではなく、ライブラリの設定スクリプトを指定します。パッケージでlibxmlをインストールしている場合は「/usr/bin/xml2-config」になります。こういう標準の場所であれば「--with-libxml-dir」は不要ですが、どの場所のライブラリでビルドしているかを明示するために指定します。
libxmlを使っているエクステンションはlibxmlエクステンションだけではありません。configureのヘルプを確認すると、DOM、SimpleXML、SOAP、WDDX、XML Parser、XMLReader、XML-RPC、XMLWriterというエクステンションがlibxmlを利用していることが分かります。
このうち、DOM、SimpleXML、XML Parser、XMLReader、XMLWriterは標準で有効になっていますので、特になにも指定しなくても有効になります。もちろん無効にすることもできますが、それなりによく利用するエクステンションでもありますので、あえて無効にする必要はないでしょう。
残りのSOAP、WDDX、XML-RPCはお好みでということになりますが、せっかくですのでここでは有効にすることにします。「--enable-soap」「--enable-wddx」「--with-xmlrpc」で指定します。
libxmlとは無関係なXML関連のエクステンションもあります。その中で比較的使用頻度が高いのがXSLエクステンションです。これはlibxsltという外部のライブラリを使うためのエクステンションです。パッケージでは「libxslt-devel」をインストールしておきます。エクステンションを有効にするには、「--with-xsl」でライブラリのあるディレクトリを指定します。
configureスクリプトはこうなる
ここまでの内容をまとめると、ApacheとPHPに必要になる外部ソフトウェアのOSパッケージのインストールコマンドは次のようになります。1行目がApacheのビルドに必要なもの、2行目は前回の内容、3行目は今回の内容です。
$ sudo yum install zlib-devel openssl-devel db4-devel pcre-devel $ sudo yum install libicu-devel gettext-devel $ sudo yum install readline-devel libxml2-devel libxslt-devel
次にPHPの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 \ --with-readline=/usr \ --with-libxml-dir=/usr/bin/xml2-config \ --enable-soap \ --enable-wddx \ --with-xmlrpc \ --with-xsl=/usr \ 2>&1 | tee configure_log.txt
次回も引き続き、よく使うエクステンションについて解説していきます。
- 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.