Wednesday, March 11, 2009

被Exception Handler虐了。。

调整了一下代码的结构,把几个库扔进了namespace,结果代码就开始跑不通了

但凡有异常被抛出,apache就会挂

apache的错误没有任何帮助,全都是些
[Wed Mar 11 09:54:23 2009] [notice] Parent: child process exited with status 3221225477 -- Restarting.
的东西
没有任何意义的返回码

于是试着把代码回滚,从r104到r100,一点点merge
终于出现了一个有点用的错误提示

PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0

google了下,看到了php文档的comments
http://cn.php.net/manual/en/function.set-exception-handler.php#88082

然后把代码改动了
原始版本:
/**

* Exception handler and some default exception definitions
*
* @file /include/class/kernel/exception.class.php
* @author sskaje (sskaje@gmail.com)
* @lastedit 2009-03-05 12:56
* @version 1.0.0
* @package SS Kernel
* @subpackage exception
*/
declare(encoding='UTF-8');
namespace ssns;

/**
* Exception Handler
*
*/
final class ssExceptionhandler
{
private function __construct()
{
}
/**
* 自定义异常
*
*/
static public function custom_exception_handler()
{
set_exception_handler(array(__CLASS__, 'exception_handler'));
}
/**
* custom exception handler
*
* @param Exception $exception
*/
static public function exception_handler($exception)
{
if (SS_INTERFACE == SS_INTERFACE_CLI)
{
$exception_name = get_class($exception);
sscDebug::stderr('Exception {'.$exception_name.'} : '.$exception, '[Exception]');
exit;
}

debug_print_backtrace();

exit;

if ( $exception instanceof ssExceptionFatal)
{
self::error_exit_page($exception);
}
elseif ( $exception instanceof ssExceptionMsgbox )
{
msgbox($exception);
}
else
{
die( 'Unknown Exception : ' . $exception );
}
}
/**
* error_exit_page
*
* @param string $message
*/
static public function error_exit_page($message)
{
$email = predisp_email(SS_EMAIL);
$version = SS_VERSION;

echo <<<TEXT
...
TEXT; exit;
}
}

改动后
/**

* Exception handler and some default exception definitions
*
* @file /include/class/kernel/exception.class.php
* @author sskaje (sskaje@gmail.com)
* @lastedit 2009-03-05 12:56
* @version 1.0.0
* @package SS Kernel
* @subpackage exception
*/

declare(encoding='UTF-8');
namespace ssns;

/**
* Exception Handler
*
*/
final class ssExceptionhandler extends sscComponent // implements ssifComponent
{
private function __construct()
{
}
/**
* 自定义异常
*
*/
static public function custom_exception_handler()
{
set_exception_handler(array(__CLASS__, 'exception_handler'));
}
/**
* custom exception handler
*
* @param Exception $e
*/
static public function exception_handler($e)
{
try
{
if (SS_INTERFACE == SS_INTERFACE_CLI)
{
$exception_name = get_class($e);
sscDebug::stderr('Exception {'.$exception_name.'} : '.$e);
exit;
}

throw $e;
}
catch (ssExceptionFatal $e)
{
self::error_exit_page($e);
}
catch (ssExceptionMsgbox $e)
{
msgbox($e);
}
catch (Exception $e)
{
die( 'Unknown Exception : ' . $e->getMessage() );
}
}
/**
* error_exit_page
*
* @param string $message
*/
static public function error_exit_page($message)
{
$email = predisp_email(SS_EMAIL);
$version = SS_VERSION;

echo <<<TEXT
...
TEXT;

exit;
}
}

No comments:

Post a Comment