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



last updated
2003/10/18

counter hits
since 1999/11/06


PHP4のDOMサポート手順

alertPHPマニュアル より。。。注意: この拡張は実験的なものではありません。しかしながら、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

memo以前に試したlibxml2 2.4.3では、/usr/local/include/libxmlとしてインストールされていましたので、インストール後の作業は必要ありませんでした。

caution[2002/05/09] cvsからcheckoutしたPHP4.3.0devで試したところ、libxml-2.4.6ではコンパイルエラーとなりましたが、2002/05/09現在最新の2.4.21ではコンパイルできました。

caution[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)

alert--with-dom、--with-zlib-dirの指定は必須です。

memo--with-dom=/usr/localとしなくても、configureスクリプトが/usr/lib・/usr/local/libのいずれかのディレクトリにlibxml2が存在するかどうか、判断しているようです

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

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

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

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

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

$ make
$ su
# make install

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

memoconfigure終了後、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で記述する必要があります。

memo[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
    // 新規XMLドキュメントを作成し、ルート要素を追加
    $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);

    // 追加修正したXMLを表示
    echo $dom->dumpmem();

    echo "<hr>以下作成されたXMLドキュメントのソースです<br>";
    echo "<pre>";
    echo htmlspecialchars($dom->dumpmem());
    echo "</pre>";
?>



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