Web Artisan Blog - ウェブ アルチザン ブログ

PHP:PHP5でのDOMXML関数:PHP4とPHP5の互換:DOM Function

PHP

2004年11月19日

アフィリエイトから企業サイト分析まで。訪問者の動きがまるわかりのアクセス解析サービス「リサーチアルチザンプロ」

LINEやSkypeみたいなビデオ通話がブラウザだけでできる!オンライン通話サービス「EZ-Interview - イージーインタビュー」

自作アクセス解析ツールはPHP4で作ってました。(あんま意識してませんでしたが。。)
このツールは、DOM XML関数を使用してまして、XMLベースで動きます。
それを、別サイトでも使おうとインストールすると、思いっきりエラー出ました。。。
別サイトはPHP5環境です。

別サイトはNucleusで構築してますし、サイト自体は問題無く動作しているので、
PHP5環境でもNucleusが使用できることの確認は出来ましたが、
アクセス解析ツールの方がコケまくり。。
エラーの原因はDOM XML関数でしが、これがPHP5で使用できないとの記述も
これといって見当たらず、途方にくれている時に出会った下記サイト。
>PHP5.0.0のDOM Functionに関する諸情報
これを足がかりに、大変な対応がとりあえず今終わったところです。。
まず思ったのが、できればツールの修正は行いたくなかったので、
PHP5の環境でPHP4が動くようにならないかと思っていたところ、
下記の記事を参考に、
>Part 4 PHP 4からPHP 5への移行
「.htaccess」ファイルに下記の記述を追加。

.htaccessファイル
<IfModule mod_php5.c>
  php_flag zend.ze1_compatibility_mode On
</IfModule>



しかし、DOM XML関数に関しては、これ自体が拡張モジュールなので、
PHP4環境にしても駄目なようです。。。(確信は持てませんが、おそらく)

こうなると、DOM XML関数をPHP5バージョンに書きかえるしかありません。
仕方なく作業開始。

まず、PHP5で特にDOM XML関数の仕様が変わった、
W3Cの規約に準拠した形となったという情報を得たので、
では、そのPHP5でDOM XML関数をどう書けばええねんと悩んだのですが、
PHPマニュアルサイトと他記事を参考にした結果、
次のマニュアルを参考にすることがわかりました。
>XXIV. DOM Functions

ところで、PHP4で作成したDOM XML関数は、どのマニュアルを参考にしたかというと、
>XXV. DOM XML関数
になります。目次的には隣り合わせ。。
英語と日本語が混在したマニュアルなので、
ついつい二つの意味する所を無視していましたが、
「DOM Function」の方が、W3Cに準拠し、PHP5に対応している関数群と言えます。

で、このマニュアルを見ながら、関数置き換えていったら終わりかと思ったのですが、
イマイチ、マニュアル見てもわかりにくい。。。
要は、PHP5自体がかなりオブジェクト指向、クラスをバリバリ使ったプログラミング、
Exceptionも発行してくれたりと、かなりJavaっぽくなってまして、
そもそも、そういうクラスを使ったソースの構造にもしてませんでしたし、
何か、根本的に修正が発生してしまうという、かなり困難な状況だという事がわかりました。

そういう意味でも、マニュアル見ただけではわからない。
しかも何がわからないって、全てのメソッドとかが載ってるわけでないので、
もう、これは「DOM」という根本的な仕様をわからないと組めない事がわかったのです。

よって、修正の際は、下記の「W3C」サイトより、
「DOM」の仕様を見ながら、メソッド探しを行いました。
>1.Document Object Model Core

DOM XML関数のどのメソッドが、
DOM Functionのどのメソッドに変わったというのを羅列するのは困難ですが、
例えばXMLをOPENする処理も下記のような違いがあります。

PHP4:DOM XML関数
$dom = domxml_open_file($xmlfilename);

PHP5:DOM Function
$dom = new DOMDocument;
$rtn = $dom->load($xmlfilename);



・・・移行するのは、処理によってはかなり大変かも。。

後、DOMのオブジェクトにXSLを適用させるには、
DOM XML関数では、それ自体にXSLT関数が用意されてましたが、
DOM Functionを使用する際は、「XSL Function」を使用します。
>CXXII. XSL functions

以下に、その一例を記します。

PHP4:DOM XML関数
$xsldoc = domxml_xslt_stylesheet_file($xsltfilename);
$result = $xsldoc->process($dom);

PHP5:DOM Function
$xsl = new DomDocument;
$xsl->load($xsltfilename);
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);
$result = $proc->transformToXML($dom);



Web面接に最適。ブラウザだけでビデオ/音声通話ができるオンライン通話サービス。「EZ-Interview - イージーインタビュー」
訪問者録画機能も付いたシンプルで高機能なリアルタイムアクセス解析「リサーチアルチザンプロ」