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