我正在运行Windows XP,预编译的PHP二进制文件可从windows.php.net获得。我从PHP 5.2.5升级到PHP 5.2.16,现在我的一些样式表中的xsl:include
停止工作。连续测试每个版本,我发现它通过了5.2.8,并且在5.2.9+中不起作用。我现在每个xsl:include
都会得到以下三个错误。升级PHP版本后xsl:include失败;是libxml/libxslt版本不匹配的问题?
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">
。有趣的是,在第一个和第三个错误中,它显示file://协议只有一个斜杠而不是正确的两个。我猜这就是问题所在。 (当我使用“file:/”硬编码一个完整路径时,它失败了,但是当我使用“file://”硬编码一个完整路径时,它可以工作。)但是,这可能导致什么? libxslt/libxml中的错误?我还发现libxml和libxslt编译的libxml版本之间存在明显的版本不匹配。
5.2.5
libxml的版本=> 2.6.26
编译的libxslt针对的libxml版=> 2.6.265.2.8
的libxml版=> 2.6.32
针对libxml编译的libxslt版本=> 2.6.32===从5.2.9开始的版本===
5 .2.9
libxml的版本=> 2.7.3
编译的libxslt针对的libxml版=> 2.6.325.2.16
libxml的版本=> 2.7.7
针对的libxslt的libxml版=> 2.6编译。 32
直到PHP 5.2.9,libxslt都是针对PHP中包含的相同版本的libxml编译的。但从PHP 5.2.9开始,libxslt是针对libxml的旧版本进行编译的,而不是PHP中包含的版本。 这是分布式二进制文件的问题还是巧合?
为了测试这个,我想PHP可以使用不同版本的libxml/libxslt来构建,以查看哪些组合可以工作或不需要。不幸的是,我在Windows世界中脱离了我的元素,并且在Windows上构建PHP似乎超出我的想象。
遗憾的是,我至今无法用我的应用程序外部的示例重现此问题,所以我正努力缩小范围,无法提交特定的错误。
那么,你认为它是由
- 的版本不匹配的问题在分布式二进制文件引起的?
- 在PHP 5.2.9中引入的错误?
- 在libxml 2.7中引入了一个bug?
- 别的东西?
我很难过。任何想法都可能将我指向正确的方向,我们对此表示赞赏。谢谢。