php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #8895 xslt_process() documentation problem
Submitted: 2001-01-25 02:02 UTC Modified: 2001-04-05 20:06 UTC
From: php-bugs at improbable dot org Assigned: sterling (profile)
Status: Closed Package: Sablotron XSL
PHP Version: 4.0.4pl1 OS: Linux (Debian 2.2r2)
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: php-bugs at improbable dot org
New email:
PHP Version: OS:

 

 [2001-01-25 02:02 UTC] php-bugs at improbable dot org
According to the documentation xslt_process() is supposed to return false and allow you to check errors with xslt_errno() & xslt_error().

I found several situations where a validation error in the XSL stylesheet would cause it to instead fail with a fatal error:

PHP Fatal error:  msgtype: error
 in /var/www/stone2/index.php on line 18
(One example of an error would be a HTML tag with unquoted parameters (e.g. BORDER=0), which is legal for numeric values in HTML but not XML)
Needless to say, this made debugging rather tricky as it never reached the error display in my code:
        if (xslt_process($XSL, $XML, $result)) {
                echo $result;
        } else {
                echo '<P>XSL transformation error: </P>';
                echo xslt_errno() . ': ' . xslt_error();
        }

PHP config info:
                          PHP Version 4.0.4pl1

   System Linux gigante 2.2.18pre21 #1 Sat Nov 18 18:47:15 EST 2000 i686
                                  unknown
                           Build Date Jan 24 2001
      Configure Command './configure' '--with-apxs' '--enable-shared'
       '--with-bz2' '--with-java=/usr/local/jdk1.3' '--with-gettext'
       '--with-mcrypt' '--with-zlib' '--with-openssl=/usr/local/ssl'
         '--enable-magic-quotes' '--enable-calendar' '--with-curl'
         '--with-mcrypt' '--with-dom=/usr/local/lib' '--enable-ftp'
     '--enable-gd-imgstrttf' '--with-gd' '--with-jpeg-dir' '--with-ttf'
        '--with-t1lib' '--with-imap-ssl' '--with-imap' '--with-ldap'
      '--with-mysql' '--with-pdflib=/usr/local/lib' '--with-zlib-dir'
    '--with-jpeg-dir' '--with-png-dir' '--with-tiff-dir' '--with-pgsql'
             '--with-pspell' '--with-readline' '--with-sablot'
          '--with-sablot-errors-descriptive' '--enable-trans-sid'
    '--enable-shmop' '--enable-sockets' '--with-swf' '--enable-sysvsem'
             '--enable-sysvshm' '--enable-inline-optimization'
'--enable-memory-limit'

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-02-14 06:19 UTC] sterling@php.net
not a bug.   xslt_process() returns false on failure, you can supress errors using the @ sign.	
 [2001-02-14 10:53 UTC] php-bugs at improbable dot org
Please try to read the bug report before closing it. xslt_process() does *NOT* return false with some errors. Instead, it returns a PHP fatal error which cannot be trapped using @.
 [2001-04-05 14:16 UTC] sterling@php.net
this is the correct behavior, if the transformation fails so
will php.
 [2001-04-05 17:00 UTC] php-bugs at improbable dot org
This is ridiculous - this is the second time this bug has been closed by someone who never bothered to read the report!

According to the documentation:
The xslt_process() takes a string containing the XSLT stylesheet as its first argument, it takes a second string containing the XML data you want to transform and then a third string containing the results of the transformation. xslt_process() will return true on success and false on failure, to get the error number and error string if an error occurs use the xslt_errno() and xslt_error() functions. 

There is no conceivable way returning an untrappable fatal error can be seen as a simple return false, particularly since the comment about errors suggests that your script will continue executing if xslt_process() encounters an error. Currently, there's no way to call xslt_errno() / xslt_error().

There are three options at this point: actually fixing the Sablotron extension or changing the documentation to say something like "If the transform fails, PHP will immediately terminate with a fatal error". Or you could just close it a 3rd time with a bogus comment - I won't bother reopening it, as I don't use Sablotron regularly.

This still reproduces with 4.0.5-dev, built from a CVS checkout on 3/26.
 [2001-04-05 20:06 UTC] sterling@php.net
The xslt_process() function *does* return false on failure.
 However, if the error is serious enough, the php script
will exit out, as with any of the sablotron functions. 
Furthermore, it never sends a fatal error if the
transformation fails, it sends an error of type E_ERROR for
critical sablotron errors transformations and an error of
type E_WARNING for warnings.

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 21:01:28 2024 UTC