|
PHPマニュアル より。。。注意: この拡張は実験的なものではありません。しかしながら、PHP 5 では決してリリースされないでしょう。また、PHP 4 でのみ配布されます。 もし PHP 5 でDOM XML をサポートする必要がある場合、 DOM 拡張を使用することができます。 この domxml 拡張は DOM 拡張と互換性はありません。
試験的ですが、PHPも4.0からDOM APIをサポートするようになりました(一部の関数はごく最近のバージョンからです)。PHPマニュアルにもありますが、 GNOME xmlライブラリ(libxml-2.2.7以降)が必要となります。今回は、libxml2をソースからコンパイル・インストールましたので、そちらの手順(というほどでもないが)も示しました。
1.Apacheのインストール・httpd.confの設定
Apacheのインストールのページを参照して、DSOをサポートするようインストールしてください。
2.libxmlのインストール
The XML C library for Gnome(http://www.xmlsoft.org/)からソースを取得します。最新版は(2001/10/13現在)は、libxml2 2.4.6です。ソースをダウンロード・展開後、libxml2-2.4.6ディレクトリに移動し、configure、make installすれば完了です。デフォルトでは、/usr/local/libにインストールされます。
$ tar zxf libxml2-2.4.6.tar.gz
$ cd libxml2-2.4.6/
$ ./configure
$ su -
# make install
インストール後、/usr/local/include/libxmlが存在するかどうか確認します。なければ、/usr/local/include/libxml2/libxmlを/usr/local/include/libxmlとしてシンボリックリンクを張っておきます。これは、PHP4.0.6のconfigureが、libxml2のヘッダファイルが格納されたディレクトリとして/usr/local/include/libxmlを探すためです。
# ln -s /usr/local/include/libxml2/libxml /usr/local/include/libxml
以前に試したlibxml2 2.4.3では、/usr/local/include/libxmlとしてインストールされていましたので、インストール後の作業は必要ありませんでした。
[2002/05/09] cvsからcheckoutしたPHP4.3.0devで試したところ、libxml-2.4.6ではコンパイルエラーとなりましたが、2002/05/09現在最新の2.4.21ではコンパイルできました。
[2003/10/18] イマサラなネタですが、PHP4.3.3ではlibxml2.4.14以上が必要になります。久しぶりにPHPを入れ替えるときにハマリました。。。
3.PHPのソースを入手・展開
PHP本家のサイト(http://www.php.net/)からソースを取得します。最新版は(2001/10/13現在)は、PHP4.0.6です。また、mbregexは日本PHPユーザー会のサイトからダウンロードします。php-4.0.6.tar.gzをダウンロード・展開後、php-4.0.6ディレクトリに移動します。GNU tarの場合、以下のコマンドです。
$ tar zxf php-4.0.6.tar.gz
$ cd php-4.0.6/
4.PHPのconfigure
ここで、DOMサポートのオプションを付け、configureスクリプトを実行します。なお、内部的にzlibも使用するようですので、--with-zlib-dirオプションも併せて付けます。今回は、以下のオプションを付けましたが、その他のオプションはお好みにより付けて下さい。
- PHPをApache DSO版にする(*1)
- PHPでDOMXML関数をサポートする(*2)
- マルチバイト文字列関数(mbstring)をサポートする(*3)
- デフォルトで組み込まれるMySQLサポートを外す(*4)
具体的なコマンドは、以下のようになります(カッコ内の数字は、上記のオプションの説明に対応しています)。
$ ./configure --with-apxs=/usr/local/apache/bin/apxs \ (*1)
--with-dom \ (*2)
--with-zlib-dir \ (*2)
--enable-mbstring \ (*3)
--enable-mbstr-enc-trans \ (*3)
--without-mysql (*4)
--with-dom、--with-zlib-dirの指定は必須です。
--with-dom=/usr/localとしなくても、configureスクリプトが/usr/lib・/usr/local/libのいずれかのディレクトリにlibxml2が存在するかどうか、判断しているようです
configure --help とすると、オプションの説明が表示されます。
PHP3/4を同居させるためには、PHP3、PHP4のconfigure時に「--enable-versioning」オプションを付け、それぞれmake・make installします。
configureに失敗した場合、コンソールの最後にメッセージが表示されるので、確認してみましょう。また、ログファイルconfig.logが作成されているはずですので、こちらも確認してみましょう。このファイルには、configureスクリプトの何行目辺りにある、どういった処理を行っている時にエラーとなったかが記されています。
5.コンパイルとインストール
configureが無事終了したら、makeを実行しコンパイルを行います。コンパイルが終了したらrootユーザーとなり、インストールを実行します。
$ make
$ su
# make install
インストール先は、[Apacheのインストール先]/libexec となります。ここにlibphp4.soが存在するかどうか、確認しましょう(これが実体です)。
configure終了後、suでrootユーザーになり、make installとしてもOKです。個人的には最近こちらの手順を使っています。
6.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(必要であればアンコメント)
7.Apacheの起動と動作確認
[Apacheのインストール先]/bin/apachectlを使って、Apacheを起動します。PHP+Oracleのインストール手順で示しているような起動・停止スクリプトを別途作成している場合は、そちらを使って起動してください。
$ su -
# [apachectlへのパス]apachectl start
以下のようなPHPスクリプトを用意し、ブラウザでアクセスしてみます。なお、スクリプト自体をUTF-8で記述する必要があります。
[2002/05/09] マルチバイト関数のmb_convert_encodingを使えば、PHPスクリプトはEUC-JPなどでもOKです。
<?php
$doc = new_xmldoc("1.0");
$root = $doc->add_root("HTML");
$head = $root->new_child("HEAD", "");
$head->new_child("TITLE", "テスト");
$head->new_child("BODY", "テストです。");
echo $doc->dumpmem();
?>
[2002/05/09] PHPマニュアルにもあるとおり、PHP4.3.0からAPIがかなり変わるようです。PHP4.3.0devでは、以下のような感じです。
<?php
$dom = domxml_new_doc("1.0");
$html = $dom->create_element("html");
$html->set_attribute("lang", "ja");
$root = $dom->append_child($html);
$head = $dom->create_element("head");
$title = $dom->create_element("title");
$text = $dom->create_text_node("test");
$title->append_child($text);
$head->append_child($title);
$root->append_child($head);
$body = $dom->create_element("body");
$text = $dom->create_text_node(mb_convert_encoding("テストです", "UTF-8"));
$body->append_child($text);
$root->append_child($body);
echo $dom->dumpmem();
echo "<hr>以下作成されたXMLドキュメントのソースです<br>";
echo "<pre>";
echo htmlspecialchars($dom->dumpmem());
echo "</pre>";
?>
|