[PHP-users 11887] xslt_process関数で相対パスでファイルを指定できない

Kosuke Tanabe php-users@php.gr.jp
Fri, 29 Nov 2002 00:06:59 +0900


田辺と申します。
XSLT関数のことについて質問させてください。

以下のようなファイルを用意しています。

$ ls -l /home/httpd/html
-rw-r--r--    1 tanabe   tanabe        218 2002-11-28 23:31 test.php
-rw-r--r--    1 tanabe   tanabe         70 2002-11-28 23:32 test.xml
-rw-r--r--    1 tanabe   tanabe        316 2002-11-28 23:37 test.xsl

[test.xml]
<?xml version="1.0" encoding="utf-8"?>
<aaa>
 <bbb>test</bbb>
</aaa>

[test.xsl]
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="utf-8" indent="yes" />
 <xsl:template match="/">
 <html>
 <body>
  <p><xsl:value-of select="aaa/bbb" /></p>
 </body>
 </html>
 </xsl:template>
</xsl:stylesheet>

[test.php]
<?php
$xml_file = 'test.xml';
$xsl_file = 'test.xsl';
$xslt = xslt_create();
$data = xslt_process($xslt, $xml_file, $xsl_file);
xslt_free($xslt);
echo $data;
?>

ここでtest.phpのxslt_processの引数であるXML/XSLファイルのパスを相対指
定して、ブラウザでtest.phpにアクセスすると、

WWarning: Sablotron error on line none: cannot open file '/test.xsl' 
in /home/tanabe/public_html/xml/test.php on line 5

と、エラーが出てしまいます。一方、

$xml_file = '/home/tanabe/public_html/xml/test.xml';
$xsl_file = '/home/tanabe/public_html/xml/test.xsl';

のように、パスを両方絶対指定にすると、正常に"test"と表示されます。

xslt_processのマニュアルやサンプルでは相対指定で記述されていますが、ど
こか設定で見落としているところがあるのでしょうか? 検索エンジンで調べ
てみたのですが、同様の事例は発見できませんでした。

なお、OSはLinux(Debian sid)、Apacheのバージョンは2.0.43、PHPのバージョ
ンは4.3.0RC2、sablotronのバージョンは0.96で、いずれもソースからインス
トールしています。
また、PHPのコンパイルオプションは以下の通りです。
'./configure' '--enable-xslt' '--with-xslt-sablot=/usr/local' 
'--with-dom=/usr' '--with-expat-dir=/usr' '--with-zlib' 
'--with-apxs2=/usr/local/apache2/bin/apxs'

-- 
Kosuke Tanabe mailto:nabegyu@hh.iij4u.or.jp