PHP 4から5移行、XSLTではまる話

 PHP4ではXSLT処理にSablotronを利用していた。レンタルサーバーを変えてPHP5になったときも、PHP4互換機能でごまかしていた。しかし、いつまでもこんな状態じゃまずいと思い、PHP5への移行をやっと実行に移す。
 テスト環境はローカルネットワークのサーバー上で行っていたのだが、今回はWindowsマシンにXAMPP環境を用意した。まず最初のはまりはこれ。
 最初は、XAMPPのApacheにアクセスできない。これはPort:80を使うSkypeが起動してるのがだめ。Skypeを終了したら、OK。じゃあ、次。
 XAMPPはPHP4とPHP5を切り替えられる。ということなので、テスト環境にはばっちりのはず。
 しかし、XAMPPフォルダにはphp-switch.batという切り替え用のバッチファイルが見当たらない。
 調べてみると、最新のXAMPPにはPHP4環境がないのだという。PHP4は開発もメンテも終わっているので、切り捨てられたようだ。これに気づくまで数十分。ということで、前のバージョンを落とす。version 1.6.8。
 次。
 PHP5のXSLTプロセッサを利用するのはカンタンだった。
 移行期、ということで、とりあえず、PHP4でもPHP5でも動くように、バージョンを判断して分岐するようにしてみた。PHP4だったらSablotoron、PHP5なら標準のXSL関数を利用するといった具合。
 しかし。PHP4で使っていたコードでエラーが出る。XAMPPをPHP4で起動してもだめなのだ。エラーはこんな感じ。

Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in /**/***/**.php on line 7 Sorry, sample.xml could not be transformed by sample.xsl into and the error code is 2 the $result variable the reason is that XML parser error 4: not well-formed (invalid token)1

ファイル名とかは行番号とかは例ということで。
 テスト用のサーバーでは問題なく動いていたコードさえ、エラーが出ていることに気づく。あれ?
 ここで数時間。
 エラーコードとかメッセージでいろいろ検索しても出てこない。ということで、あらためて、公式のドキュメントを読む。答えはそこにあった。
 Windowsではパスの前に「file://」をつける必要がある。
 そんなカンタンなことだったとは! 
 エラーメッセージから、XSLファイルをえんえんチェックしてしまった。考えてみれば、PHP5で動くし、別のサーバーでPHP4で動いてたので、それをチェックしたってしょうがないのだった。 
 XAMPPのPHP側でそのへん吸収してくれないもんか。とか思った。メモ。

コメント