From:             akorthaus at web dot de
Operating system: Linux 2.4.32 (gentoo)
PHP version:      5.1.2
PHP Bug Type:     Scripting Engine problem
Bug description:  ErrorException does not work with include/require errors

Description:
------------
The ErrorException class bundled with PHP 5.1 does not work with
Warnings/Fatal Errors produced by include() and require().

Reproduce code:
---------------
<?php
function ErrorsToExceptions($severity, $message) {
  throw new ErrorException($message, 0, $severity);
}
set_error_handler('ErrorsToExceptions');

try {
  include('./DOES_NOT_EXIST');
}
catch (Exception $e) {
  echo get_class($e) . " catched!\n"
  echo $e->getMessage();
}
?>


Expected result:
----------------
should throw an ErrorException and display $e->getMessage(), and should
NOT display a PHP Warning.

Actual result:
--------------
Warning: main(): Failed opening './DOES_NOT_EXIST' for inclusion
(include_path='.:') in /home/akorthaus/test/exc4.php on line 16
ErrorException catched!
include(./DOES_NOT_EXIST): failed to open stream: No such file or
directory

if I replace "include" with "require", I get:

Fatal error: main(): Failed opening required './DOES_NOT_EXIST'
(include_path='.:') in /home/akorthaus/test/exc4.php on line 14

if I replace "require" with "file_get_contents", I get:

ErrorException catched!

file_get_contents(./DOES_NOT_EXIST): failed to open stream: No such file
or directory

That's what I'd expect to see from include() and require() too
(ErrorException also works with other Fatal Errors!). 

So include() seems to throw an ErrorException, but additionaly displays
the PHP Warning, require only displays the PHP Fatal Error, and does not
throw an Exception at all. 

Is this intended? Is it somewhere documented how ErrorException works or
should be used?

-- 
Edit bug report at http://bugs.php.net/?id=36896&edit=1
-- 
Try a CVS snapshot (PHP 4.4): 
http://bugs.php.net/fix.php?id=36896&r=trysnapshot44
Try a CVS snapshot (PHP 5.1): 
http://bugs.php.net/fix.php?id=36896&r=trysnapshot51
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=36896&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=36896&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=36896&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=36896&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=36896&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=36896&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=36896&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=36896&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=36896&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=36896&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=36896&r=globals
PHP 3 support discontinued:   http://bugs.php.net/fix.php?id=36896&r=php3
Daylight Savings:             http://bugs.php.net/fix.php?id=36896&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=36896&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=36896&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=36896&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=36896&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=36896&r=mysqlcfg

Reply via email to