windows.php.netから入手できるコンパイル済みの PHP バイナリを使用して Windows XP を実行しています。PHP 5.2.5 から PHP 5.2.16 にアップグレードしたところxsl:include
、一部のスタイルシートの が機能しなくなりました。各バージョンを連続してテストしたところ、5.2.8 までは機能し、5.2.9 以降では機能しないことがわかりました。それぞれに対して次の 3 つのエラーが発生しますxsl:include
。
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: I/O warning : failed to load external entity "file%3A/C%3A/path/to/included/stylesheet.xsl" in ... on line 227
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error: file file%3A//C%3A/path/to/included/stylesheet.xsl line 36 element include in ... on line 227
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:include : unable to load file%3A/C%3A/path/to/included/stylesheet.xsl in ... on line 227
これは、指定されたファイルが見つからないためだと思います。インクルードの多くは、変換されるスタイルシートと同じディレクトリにあり、パスにディレクトリがありません<xsl:include href="fileInSameDir.xsl">
。興味深いことに、1 番目と 3 番目のエラーでは、正しい 2 つのスラッシュではなく 1 つのスラッシュで file:// プロトコルが表示されています。それが問題だと思います。(「file:/」を使用してフル パスをハードコーディングすると失敗しますが、「file://」を使用してフル パスをハードコーディングすると機能します。) しかし、何が原因でしょうか? libxslt/libxml のバグ? また、libxml と、libxslt がコンパイルされた libxml のバージョンとの間に明らかなバージョンの不一致があることもわかりました。
5.2.5
libxml バージョン => 2.6.26
libxml バージョンに対してコンパイルされた libxslt => 2.6.265.2.8
libxml バージョン => 2.6.32 libxml バージョン => 2.6.32
に対してコンパイルされた libxslt=== 5.2.9 以降のバージョンでは機能しません ===
5.2.9
libxml バージョン => 2.7.3
libxml バージョンに対してコンパイルされた libxslt => 2.6.325.2.16
libxml バージョン => 2.7.7
libxml バージョンに対してコンパイルされた libxslt => 2.6.32
PHP 5.2.9 までは、libxslt は、PHP に含まれていたのと同じバージョンの libxml に対してコンパイルされていました。しかし、PHP 5.2.9 以降、libxslt は、PHP に含まれていたバージョンよりも古いバージョンの libxml に対してコンパイルされました。これは配布されたバイナリの問題ですか、それとも単なる偶然ですか?
これをテストするために、さまざまなバージョンの libxml/libxslt を使用して PHP をビルドし、どの組み合わせが機能するかどうかを確認できると思います。残念ながら、私は Windows の世界に慣れていないので、Windows で PHP を構築するのは頭がいっぱいのようです。
残念ながら、これまでのところ、この問題を自分のアプリ以外の例で再現できていないため、絞り込むのに苦労しており、特定のバグを送信することはできません.
それで、あなたはそれが原因だと思いますか
- 配布されたバイナリのバージョン不一致の問題?
- PHP 5.2.9 で導入されたバグ?
- libxml 2.7 で導入されたバグ?
- 他の何か?
私は困惑しています。私を正しい方向に向ける可能性のある考えは大歓迎です。ありがとう。