Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2004/07/15

counter hits
since 1999/11/06


PHP4.1.x以降のXSLTサポート手順

alertここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。

PHPも4.1.0からXSLTを正式サポートするようになりました。PHPマニュアルにもありますが、XSLTプロセッサであるSablotron、および、XMLパーサであるexpatの各ライブラリが必要となります。今回は、両ライブラリをソースからコンパイル・インストールしています。

1.expatのインストール

後述の「Apacheのインストール」にある理由のため、ExpatをApacheよりも先にインストールします。

Expatプロジェクトのサイト(http://sourceforge.net/projects/expat/)からソースを取得します。最新版は(2002/09/06現在)は、expat1.95.4です。ソースをダウンロード・展開後、expat-1.95.4ディレクトリに移動し、configure、make installすれば完了です。デフォルトでは、/usr/local/libにインストールされます。

$ tar zxf expat-1.95.4.tar.gz
$ cd expat-1.95.4/
$ ./configure
$ su -
# make install

2.Sablotronのインストール

Ginger Allianceのサイト(http://www.gingerall.com/charlie/ga/act/index.act)からソースを取得します。最新版は(2002/09/06現在)は、Sablotron 0.96です。Sablotron 0.96のソースをダウンロードし、ソースを展開します。

$ tar zxf Sablot-0.96.tar.gz

memoSablotron 0.95を使用する場合、PHP用のパッチがありますので、それを適用する必要があります。

caution[2002/10/08] Red Hat Linux7.3でmake時に「parser.cpp :434:cannot convert `int' to `XML_Error' for argument `1' to `XML_ErrorString(XML_Error)'」なエラーが発生する場合には、Sablotron 0.96.1パッチを当てるとうまくいくようです。

caution[2004/07/14] インストールは問題なく実行でき、Apacheの起動時に「undefined symbol: __gxx_personality_v0」なエラーが発生する場合には、gingerall.orgから辿ることができるチュートリアルの「Now lets configure Apache so we have PHP as an Apache Module」にあるように、MakefileのEXTRA_LIBSに「-lstdc++」を追加して再buildすると良いようです。Apache2.0.50+PHP4.3.8+Sablot1.0.1(ソース)で確認しました。

expatと同様、configure、make installすれば完了です。デフォルトでは、/usr/local/libにインストールされます。

$ cd Sablot-0.96/
$ ./configure
$ su -
# make install

3.Apacheのインストール

Apacheのインストールのページを参照して、DSOをサポートするようインストールしてください。ただし、Apache付属のexpat(expat-lite)をインストールしないようにする必要があります。詳しくは、PHP本家のバグDBを参照してください。2002/09/06時点で最新のApache1.3.26では、Apacheのインストールページの手順でシステムのexpatを使用するようにconfigureされますので、特に意識する必要はないです。手動で行う場合は、configure時に「--disable-rule=EXPAT」を指定します。

4.PHPのソースを入手・展開

PHP本家のサイト(http://www.php.net/)からソースを取得します。最新版は(2002/09/06現在)は、PHP4.2.2です。php-4.2.2.tar.gzをダウンロード・展開後、php-4.2.2ディレクトリに移動します。GNU tarの場合、以下のコマンドです。

$ tar zxf php-4.2.2.tar.gz
$ cd php-4.2.2/

5.PHPのconfigure

ここで、XSLTサポートのオプションを付け、configureスクリプトを実行します。今回は、以下のオプションを付けましたが、その他のオプションはお好みにより付けて下さい。

  • PHPをApache DSO版にする(*1)
  • PHPでXSLT関数をサポートする(*2、必須です)
  • マルチバイト文字列関数(mbstring)をサポートする(*3)
  • マルチバイト正規表現関数(mbregex)をサポートする(*4)
  • デフォルトで組み込まれるMySQLサポートを外す(*5)

具体的なコマンドは、以下のようになります(カッコ内の数字は、上記のオプションの説明に対応しています)。

$ ./configure --with-apxs=/usr/local/apache/bin/apxs \  (*1)
--enable-xslt \  (*2)
--with-xslt-sablot \  (*2)
--enable-mbstring \  (*3)
--enable-mbstr-enc-trans \  (*3)
--enable-mbregex \  (*4)
--without-mysql  (*5)

memoconfigure --help
とすると、オプションの説明が表示されます。

memoPHP3/4を同居させるためには、PHP3、PHP4のconfigure時に「--enable-versioning」オプションを付け、それぞれmake・make installします。

cautionconfigureに失敗した場合、コンソールの最後にメッセージが表示されるので、確認してみましょう。また、ログファイルconfig.logが作成されているはずですので、こちらも確認してみましょう。このファイルには、configureスクリプトの何行目辺りにある、どういった処理を行っている時にエラーとなったかが記されています。

6.コンパイルとインストール

configureが無事終了したら、makeを実行しコンパイルを行います。コンパイルが終了したらrootユーザーとなり、インストールを実行します。

$ make
$ su
# make install

memoインストール先は、[Apacheのインストール先]/libexec となります。ここにlibphp4.soが存在するかどうか、確認しましょう(これが実体です)。

memoconfigure終了後、suでrootユーザーになり、make installとしてもOKです。個人的には最近こちらの手順を使っています。

7.php.iniの設定

PHP4の設定ファイルであるphp.iniのコピー&設定を行います。php-4.2.2ディレクトリにphp.ini-recommendedファイルがありますので、/usr/local/lib/php.iniとしてコピーします。内容は必要に応じて適宜編集してください(^-^;

8.httpd.confの設定

[Apacheのインストール先]/conf/httpd.confを編集し、PHPを使用可能な状態にします。以下の赤字が編集した部分です。

DirectoryIndex index.html index.php
AddType application/x-httpd-php .php(アンコメント)
AddType application/x-httpd-php-source .phps(必要であればアンコメント)

9.Apacheの起動と動作確認

[Apacheのインストール先]/bin/apachectlを使って、Apacheを起動します。PHP+Oracleのインストール手順で示しているような起動・停止スクリプトを別途作成している場合は、そちらを使って起動してください。

$ su -
# [apachectlへのパス]apachectl start

以下のようなPHPスクリプト・xml・xslファイルを用意し、XSLTプロセッサの動作テストを行います。なお、XMLのデータは、PHP日本語ページ(http://www.geocities.jp/rui_hirokawa/php/)のPHP関連書籍に記載されていたものです。

●xslttest.php

<?php
    $xml_file = "test.xml";
    $xsl_file = "test.xsl";
    $xslt = xslt_create();
    $data = xslt_process($xslt, $xml_file, $xsl_file);
    xslt_free($xslt);
    echo $data;
?>

●test.xml
<?xml version="1.0" encoding="shift_jis"?>
<article>
  <subject>PHP関連書籍</subject>
  <book>
    <title>PHP4徹底攻略</title>
    <isbn>ISBN4-7973-1392-7</isbn>
  </book>
  <book>
    <title>Dynamic Webサイト構築入門 PHP編</title>
    <isbn>ISBN-4898142818</isbn>
  </book>
  <book>
    <title>Oracle8iとPHPで作るWebデータベースfor Miracle Linux</title>
    <isbn>ISBN4871938670</isbn>
  </book>
  <book>
    <title>PHPパーフェクトリファレンス</title>
    <isbn>ISBN-4894714027</isbn>
  </book>
  <book>
    <title>ホンキで学ぼう!PHPのキホン―PHP4によるwebアプリケーション構築のはじめの一歩</title>
    <isbn>ISBN4-7980-0119-8</isbn>
  </book>
  <book>
    <title>PHP、PerlでつかうXML/XSL―Sablotronで実現するWEBサイト管理の効率化</title>
    <isbn>ISBN4886486169</isbn>
  </book>
  <book>
    <title>プロフェッショナルPHPプログラミング</title>
    <isbn>ISBN4-8443-1483-1</isbn>
  </book>
  <book>
    <title>PHP4でカンタンWebDB構築ガイド</title>
    <isbn>ISBN4-7980-0082-5</isbn>
  </book>
  <book>
    <title>PHPデスクトップリファレンス</title>
    <isbn>ISBN4-8731-1034-3</isbn>
  </book>
  <book>
    <title>PHP+RDBMS Webサーバーでのデータベース活用術</title>
    <isbn>ISBN4871938050</isbn>
  </book>
  <book>
    <title>MySQL &amp; PHP Webデータベース入門</title>
    <isbn>ISBN4-7973-1325-0</isbn>
  </book>
  <book>
    <title>PHPプログラミング入門</title>
    <isbn>ISBN4-89471-225-3</isbn>
  </book>
  <book>
    <title>PHPによるWebデータベース構築</title>
    <isbn>ISBN4-89471-255-5</isbn>
  </book>
  <book>
    <title>オープンソースソフトウェアによる全文検索・データベースWebの作り方</title>
    <isbn>ISBN4-88337-177-8</isbn>
  </book>
  <book>
    <title>オープンソースでつくるグループウェア</title>
    <isbn>ISBN4898140505</isbn>
  </book>
  <book>
    <title>PC-UNIXによる高機能Web構築入門</title>
    <isbn>ISBN4-7741-0758-1</isbn>
  </book>
  <book>
    <title>Linux/FreeBSDによるSQLデータベース構築入門 PostgreSQL6.4.2+PHP3編</title>
    <isbn>ISBN4-07-391360-3</isbn>
  </book>
</article>

●test.xsl
<?xml version="1.0" encoding="shift_jis"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="shift_jis" indent="yes"/>

  <xsl:template match="/article">
    <html>
    <head><title><xsl:value-of select="subject"/></title></head>
    <body>
    <b><xsl:value-of select="subject"/></b>
    <hr/>
    <ul>
    <xsl:apply-templates select="book"/>
    </ul>
    </body>
    </html>
  </xsl:template>

  <xsl:template match="book">
    <li><b><xsl:value-of select="title"/></b> (<xsl:value-of select="isbn"/>)</li>
  </xsl:template>
</xsl:stylesheet>

PHPスクリプトをブラウザからアクセスし、以下のように内容が表示されればOKです。

XSLTサポートの確認画面


About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2004 by Hideyuki SHIMOOKA all rights reserved.