Edit report at https://bugs.php.net/bug.php?id=60188&edit=1

 ID:                 60188
 Comment by:         hinikato at gmail dot com
 Reported by:        hinikato at gmail dot com
 Summary:            Exception handler and shutdown hanlder were not
                     called after throwing exception
 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:

According this quote the bug should not occur if specified error types
will not be raised in the file where set_error_handler() is called.
Let's try to move the respective code fragment to the other file:
-- set_error_handler.php --
<?php
$foo = new \Foo\MyErrorHandler();
set_error_handler(array($foo, 'errorHandler'));
set_exception_handler(array($foo, 'exceptionHandler'));
register_shutdown_function(array($foo, 'fatalErrorHandler'));
?>
-- end of set_error_handler.php --
then let's modify slightly the our example:
-- bug --
namespace Foo;

class MyErrorHandler {
  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!
  }
}
require_once __DIR__ . '/set_error_handler.php';
require_once __DIR__ . '/not_existing_file.php';  // file should not
exist
die();
-- end of bug --
If you will try to run this example you will get the same invalid
behavior.


Previous Comments:
------------------------------------------------------------------------
[2011-11-02 12:12:52] johan...@php.net

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

------------------------------------------------------------------------
[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

Reply via email to