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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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-2025 The PHP Group
All rights reserved.
Last updated: Tue Jul 01 19:01:37 2025 UTC