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側でそのへん吸収してくれないもんか。とか思った。メモ。
コメント