Bug #60188 [Opn->Bgs]: Exception handler and shutdown hanlder were not called after throwing exception
Edit report at https://bugs.php.net/bug.php?id=60188&edit=1
ID: 60188
Updated by: johannes@php.net
Reported by: hinikato at gmail dot com
Summary: Exception handler and shutdown hanlder were not
called after throwing exception
-Status: Open
+Status: Bogus
Type: Bug
Package: Scripting Engine problem
Operating System: Windows 7 x64
PHP Version: 5.3.8
Block user comment: N
Private report: N
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
If a fatal error (E_ERROR) is created the engine might be in an unreliable state, we therefore
can't all error handlers. Quoting the docs:
"The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE,
E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
file where set_error_handler() is called. "
http://php.net/set_error_handler
Previous Comments:
------------------------------------------------------------------------
[2011-11-01 12:10:43] hinikato at gmail dot com
Description:
------------
The neither exception handler nor fatal error handler have not been called if error handler throws
exception in case of including not existent file using require_once.
My PHP version is: PHP Version 5.3.8-ZS5.5.0
Test script:
---------------
<?php
namespace Foo;
class MyErrorHandler {
function __construct() {
set_error_handler(array($this, 'errorHandler'));
set_exception_handler(array($this, 'exceptionHandler'));
register_shutdown_function(array($this, 'fatalErrorHandler'));
}
function errorHandler() {
echo __METHOD__ . "\n";
throw new \Exception('test');
}
function exceptionHandler() {
echo __METHOD__ . "\n"; // should be called!
}
function fatalErrorHandler() {
echo __METHOD__ . "\n"; // should be called!
}
}
echo '<pre>';
$foo = new MyErrorHandler();
require_once __DIR__ . '/not_existing_file.php'; // file should not exist
die();
Expected result:
----------------
Foo\MyErrorHandler::errorHandler
Foo\MyErrorHandler::exceptionHandler
Foo\MyErrorHandler::fatalErrorHandler
Fatal error: main() [function.require]: Failed opening required
'X:\home\localhost\www/not_existing_file.php'
(include_path='D:\system\home\projects\myak\www\includes') in
X:\home\localhost\www\test.php on line 28
Actual result:
--------------
Foo\MyErrorHandler::errorHandler
Fatal error: main() [function.require]: Failed opening required
'X:\home\localhost\www/not_existing_file.php'
(include_path='D:\system\home\projects\myak\www\includes') in
X:\home\localhost\www\test.php on line 28
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=60188&edit=1
Thread (5 messages)