ID:               20177
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Assigned
+Status:           Closed
 Bug Type:         XSLT related
 Operating System: FreeBSD 4.7
 PHP Version:      4.2.3
 Assigned To:      msopacua
 New Comment:

This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
 
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.

In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
 
Thank you for the report, and for helping us make PHP better.

There's a test as well (bug20177.phpt).
We now set the baseuri, for the 'arg' scheme, to the currently executed
file. This should be intuitive, but may still be confusing, when
dealing with includes.


Previous Comments:
------------------------------------------------------------------------

[2002-10-31 05:40:54] [EMAIL PROTECTED]

It's foremost a documentation problem. But we're looking into making it
more intuitive.
However - using a combination of a filepath and 'arg:/' is discouraged,
when the documents use external files. Relative paths are resolved
based on their file location. Using 'arg://' the file location is
currently undefined - this will be set to $_SERVER['PATH_TRANSLATED']
in future versions and documented properly.

The problem is, that this will not only apply to the xsl sheet in your
example, but also the XML file. This is a design limitation in the
Sablotron library, as xslt_set_base applies to the $xh resource, not a
specific file.

------------------------------------------------------------------------

[2002-10-30 15:08:52] [EMAIL PROTECTED]

Using Apache 2.0.43

------------------------------------------------------------------------

[2002-10-30 15:04:38] [EMAIL PROTECTED]

Sablot 0.96 and expat 1.95 installed
php-4.2.3:
./configure --enable-xslt --with-xslt-sablot --with-mysql --with-imap
--with-apxs2=/usr/local/apache2/bin/apxs --with-expat=/usr/local
--with-gettext --with-xml --with-mcrypt --enable-ftp --with-tsrm-pth

Problem: When using xslt_process and a arg:xxx, any xslt document()
calls will point to arg:(and what was in the document call)

Example xsl sheet code:
<xsl:apply-templates
select="document('/websites/xxx/htdocs/xml/messages.xml')//message[@id='nf-comp']/text[@xml:lang='en']"/>

would attempt to open:
arg:/websites/xxx/htdocs/xml/messages.xml

If I call the xsl sheet in from a file then it worked fine.

Origanal Code/Syntax Used:
<?
$xh = xslt_create();
// set xml file to be used with translation
$xmlfile=$GLOBALS["DOCUMENT_ROOT"]."/xml/product.xml";

// load dynamic xsl sheet to be used with translation
$xslstyle="http://".$GLOBALS["SERVER_NAME"]."/styles/product-detail.php?id=".$GLOBALS["HTTP_GET_VARS"]["id";];

$fp = fopen($xslstyle, "r");
$xsltdata["xsldata"]=fread($fp, 500000);
fclose($fp);

// do the translation
$result = xslt_process($xh, $xmlfile, 'arg:xsldata', NULL, $xsltdata);
?>

Fix I used to get around this:
add this line after $xh = xslt_create();
xslt_set_base($xh, "file:///");

Working Code:
<?
$xh = xslt_create();

// Added to fix trying to open arg:(and the file name)
xslt_set_base($xh, "file:///");
// End Added

// set xml file to be used with translation
$xmlfile=$GLOBALS["DOCUMENT_ROOT"]."/xml/product.xml";

// load dynamic xsl sheet to be used with translation
$xslstyle="http://".$GLOBALS["SERVER_NAME"]."/styles/product-detail.php?id=".$GLOBALS["HTTP_GET_VARS"]["id";];

$fp = fopen($xslstyle, "r");
$xsltdata["xsldata"]=fread($fp, 500000);
fclose($fp);

// do the translation
$result = xslt_process($xh, $xmlfile, 'arg:xsldata', NULL, $xsltdata);
?>



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=20177&edit=1

Reply via email to