NigelRen Posted February 11, 2012 Share Posted February 11, 2012 I've been using the exslt document tag in an XSLT template for a while. Something like <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="exsl date"> <xsl:output method="text" /> <xsl:template match="/Schema/Table"> <exsl:document href="a.b" method="text"> A </exsl:document> </xsl:template> </xsl:stylesheet> Suddenly it's stopped working with [Fri Feb 10 20:49:25 2012] [error] [client 192.168.122.1] PHP Warning: XSLTProcessor::transformToXml(): File write for a.b refused in /var/www/gen/genX/GenModelClass.php on line 72, referer: http://192.168.122.35/gen/genMenu.php [Fri Feb 10 20:49:25 2012] [error] [client 192.168.122.1] PHP Warning: XSLTProcessor::transformToXml(): runtime error: file /var/www/gen/genX/GenModelClass.xsl line 9 element document in /var/www/gen/genX/GenModelClass.php on line 72, referer: http://192.168.122.35/gen/genMenu.php So I assumed that it was write permissions to the directory it was using, but using fopen will create the file. Even if I specify the file as file:///tmp/a.b doesn't work. ( I'm using Ubuntu as the server ). Is there a working example out there which I could try and see if there is something wrong with my setup - or does someone know what's happening? Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/ Share on other sites More sharing options...
requinix Posted February 11, 2012 Share Posted February 11, 2012 I vaguely recall there being problems with PHP, libxml, and filesystem access. Some security settings preventing reading and writing. Are you simply dumping /Schema/Table to a file? Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/#findComment-1317086 Share on other sites More sharing options...
NigelRen Posted February 11, 2012 Author Share Posted February 11, 2012 I'm trying to generate sources from a database schema, but I removed all of the extra stuff in case there was something else causing problems. I've managed to get the same thing working on a CentOS virtual machine I just set up - so it may be some permissions settings on the Ubuntu config. I've tried to ensure all directories I've tried to write to are rwx for all users. If there isn't anything obvious I may just end up scrapping or rebuilding the Ubuntu machine and try again. Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/#findComment-1317095 Share on other sites More sharing options...
requinix Posted February 11, 2012 Share Posted February 11, 2012 What errors, if any, does libxml_get_errors return? Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/#findComment-1317123 Share on other sites More sharing options...
NigelRen Posted February 12, 2012 Author Share Posted February 12, 2012 With the code... $result = $xp->transformToXml($def); if ( $result == false ) { $err = libxml_get_last_error(); echo "Error...". print_r(libxml_get_errors(),TRUE) ."<br />"; } else { echo $result; } echo "<b>Complete</b>"; All I get is... Error...Array ( ) Complete The one thing - is that I always seemed to get false even when it did work. But I wasn't worried about that. Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/#findComment-1317275 Share on other sites More sharing options...
NigelRen Posted February 12, 2012 Author Share Posted February 12, 2012 :D Finally found the problem... they've changed the defaults in the way XSLT is allowed to create files etc. listed as a 'bug' ( have a read of https://bugs.php.net/bug.php?id=54446 ). I've changed the code to be $xp = new XsltProcessor(); //if you want to write from within the XSLT if (version_compare(PHP_VERSION,'5.4',"<")) { $oldval = ini_set("xsl.security_prefs",0); } else { $oldval = $xp->setSecurityPreferences(0); } $xsl = new DOMDocument(); $xsl->load("./GenModelClass.xsl"); $xp->importStylesheet($xsl); And it now works. Thanks for you help Link to comment https://forums.phpfreaks.com/topic/256913-xslt-problem-with-exslt-document-tag/#findComment-1317323 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.