ID:               14965
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Open
 Bug Type:         Documentation problem
 Operating System: Windows 2000
 PHP Version:      4.1.1
 New Comment:

Using the xslt_set_base() function on Win2k can provide a cleaner
solution to this platform's limitations with Sablotron:

$xh = xslt_create();
xslt_set_base($xh, 'file://' . $DOCUMENT_ROOT . '/examples/');

Note the trailing slash in the above line.

The following line would then work on Win2k:

$result = xslt_process($xh, 'example.xml', 'example.xsl');


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

[2002-05-02 00:55:09] [EMAIL PROTECTED]

To get this to work under Win2K and PHP 4.2.0, you must put have
"file://" prefixed to every parameter that requires a file.  This
includes the xml, xsl and the output files.

This does NOT however require to upgrade you php_xslt dll to the
version suggested by the person in bug 14499.

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

[2002-04-26 05:23:39] [EMAIL PROTECTED]

Hi, the same problem here on PWS on winodws ME, the code is 
<?php
//create processor
$my_xslt=xslt_create();
//output the processing result
echo
xslt_process($my_xslt,getcwd()."//cd_catalog.xml",getcwd()."\\cd_catalog.xsl");
//free the processor
xslt_free($my_xslt);
?>
returned
Warning: sablotron error on line 1, unknown encoding...

using this code the problem was completely solved...

<?php
//create the processor
$my_xslt=xslt_create();

//process the fiel and echo the result
echo
xslt_process($my_xslt,"file://".getcwd()."//cd_catalog.xml","file://".getcwd()."\\cd_catalog.xsl");


//free the processor
xslt_free($my_xslt);
?>
thank u,

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

[2002-01-18 17:25:52] [EMAIL PROTECTED]

Hi folks (please be gentle, my first post to bugs.php.net).

I've got exactly the same mayhem happening on my machine too.  Running
with Apache 1.3.22, and php as a cgi binary.

Here's the example code, commented, shows all that I've found this
evening.  Basically the only way I can get xslt_process() to work is
using the arguments array, putting file names in with getcwd(),
file://, include path just doesn't work :o(

<?

error_reporting (E_ALL);

// My include path is 
// include_path = ".;E:\Webserver\public_html"
//
// PHP is installed to D:\Program Files\Php

$xmlFile="Php.XPathDocumentation.xml"; 
$xslFile="Php.XPathDocumentation.xsl"; 

echo '<hr>Read file<br>';

// Get the contents of the files, 
// Both calls work ok.
$xslData = implode('',file($xslFile));
$xmlData = implode('',file($xmlFile));

echo '<hr>Create parser<br>';

$hXslt = xslt_create();

echo '<hr>Process with filenames (no path)<br>';

// This gives me a error:
// Warning: Sablotron error on line none: cannot open file 
// 'd:/program files/php/Php.XPathDocumentation.xml' 
// in e:\cvs\php.xpath\xpath-develop\doc\Php.XPathDocumentation.php on
line 79
// $result contains nothing
$result = xslt_process($hXslt, $xslFile, $xmlFile);
echo $result;

echo '<hr>Get current working directory<br>';

// This returns e:\cvs\php.xpath\xpath-develop\doc
echo getcwd();

echo '<hr>Use getcwd() and with filenames (no path)<br>';

// Warning: Sablotron error on line 1: unknown encoding '' in 
// e:\cvs\php.xpath\xpath-develop\doc\Php.XPathDocumentation.php on
line 82
// $result contains nothing
$result = xslt_process($hXslt, getcwd().'\\'.$xslFile,
getcwd().'\\'.$xmlFile);
echo $result;

echo '<hr>Use file:// getcwd and with filenames (no path)<br>';

// This call succeeds with no error.
// $result contains the entire xml file unprocessed (whitespace
trimmed).
$result = xslt_process($hXslt, 'file://'.getcwd().'/'.$xslFile,
'file://'.getcwd().'/'.$xmlFile);
echo $result;

echo '<hr>Use the xml and xsl as arguments<br>';

// But this works fine and produces the transformation as I expect
$arguments = array(
     '/_xml' => $xmlData,
     '/_xsl' => $xslData
);
$result = xslt_process($hXslt, 'arg:/_xml', 'arg:/_xsl', NULL,
$arguments);

if ($result) {
    echo $result;
} else {
    echo "There was an error that occurred in the XSL
transformation...\n";
    echo "\tError number: " . xslt_errno() . "\n";
    echo "\tError string: " . xslt_error() . "\n";
    exit;
}

echo '<hr>';

xslt_free($hXslt);

?>

If you want any copies of the files that I've been using, drop me a
mail.  I feel fairly confident that these bugs occur regardless of the
xml and xsl file, given that the final version produces exactly the
expected transformed output. 

Nigel

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

[2002-01-14 13:17:46] [EMAIL PROTECTED]

Unless the below is a typo, it's quite logical:
while (!feof ($xmlfile)) {
    $xml_file_contents = fgets($xmlfile, 4096);
    //echo $xml_file_contents;
}

should read:
while (!feof ($xmlfile)) {
    /notice the dot
    $xml_file_contents .= fgets($xmlfile, 4096);
    //echo $xml_file_contents;
}
Unless you have an xmlfile, consisting of 1 line, smaller that 4096
bytes, $xml_file_contents, will consist of the last line only.

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

[2002-01-14 08:21:44] [EMAIL PROTECTED]

Hi,

I can confrim Feddy's code works fine on Windows 2000 (thanks Freddy
:), however the code I submitted earlier still produces the error so
using either file or HTTP with fopen and using the array arguments of
xslt_process function still produces the error.

Andrew

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/14965

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

Reply via email to