/framework/boot/error/CliErrorHandler.php

http://zoop.googlecode.com/ · PHP · 122 lines · 102 code · 11 blank · 9 comment · 7 complexity · 299fb858beed7ca7ab671ffbfb340a20 MD5 · raw file

  1. <?php
  2. class CliErrorHandler
  3. {
  4. static function throwException($errno, $errstr, $errfile, $errline, $context, $backtrace = NULL)
  5. {
  6. // maybe we should use this here: http://us3.php.net/manual/en/class.errorexception.php
  7. $e = new Exception($errstr, $errno);
  8. // print_r($e);
  9. // die();
  10. // $e->setFile($errfile);
  11. // $e->setLine($errline);
  12. throw $e;
  13. }
  14. static function handleError($errno, $errstr, $errfile, $errline, $context, $backtrace = NULL)
  15. {
  16. if(!defined('app_status'))
  17. define('app_status', 'dev');
  18. if((error_reporting() & $errno) !== $errno)
  19. return true;
  20. switch(app_status)
  21. {
  22. case 'dev':
  23. self::handleDevError($errno, $errstr, $errfile, $errline, $context, $backtrace);
  24. break;
  25. case 'test':
  26. trigger_error('status not handled:' . app_status);
  27. break;
  28. case 'live':
  29. trigger_error('status not handled:' . app_status);
  30. break;
  31. default:
  32. trigger_error('status not handled:' . app_status);
  33. break;
  34. }
  35. }
  36. function handleDevError($errno, $errstr, $errfile, $errline, $context, $backtrace)
  37. {
  38. $errorLine = self::formatErrorLine($errno, $errstr, $errfile, $errline, $context, $backtrace);
  39. echo $errorLine . "\n";
  40. $backtrace = $backtrace ? $backtrace : debug_backtrace();
  41. // array_shift($backtrace);
  42. // FormatBacktraceCli($backtrace);
  43. $backtraceView = new BacktraceViewCli($backtrace);
  44. $backtraceView->display();
  45. }
  46. function formatErrorLine($errno, $errstr, $errfile, $errline, $context)
  47. {
  48. $line = "\n";
  49. switch ($errno)
  50. {
  51. case E_ERROR:
  52. case E_PARSE:
  53. case E_CORE_ERROR:
  54. case E_COMPILE_ERROR:
  55. die('this should never happen');
  56. break;
  57. case E_CORE_WARNING:
  58. case E_COMPILE_WARNING:
  59. case E_STRICT:
  60. case E_RECOVERABLE_ERROR:
  61. $line .= 'Error type not yet handled: ' . $errno . '';
  62. break;
  63. case E_WARNING:
  64. $line .= 'Warning:';
  65. break;
  66. case E_NOTICE:
  67. $line .= 'Notice:';
  68. break;
  69. case E_DEPRECATED:
  70. $line .= 'Deprecated:';
  71. break;
  72. case E_USER_ERROR:
  73. $line .= 'User Error:';
  74. break;
  75. case E_USER_WARNING:
  76. $line .= 'User Warning:';
  77. break;
  78. case E_USER_NOTICE:
  79. $line .= 'User Notice:';
  80. break;
  81. case E_USER_DEPRECATED:
  82. $line .= 'User Deprecated:';
  83. break;
  84. case 0:
  85. $line .= 'Exception:';
  86. break;
  87. default:
  88. $line .= 'Undefined error type: ' . $errno . '';
  89. break;
  90. }
  91. $line .= ' ' . $errstr . "";
  92. $line .= ' in file ' . $errfile;
  93. $line .= ' ( on line ' . $errline . ')';
  94. return $line;
  95. }
  96. function exceptionHandler($exception)
  97. {
  98. // print_r($exception->getCode());die();
  99. $backtrace = $exception->getTrace();
  100. $file = $exception->getFile();
  101. $line = $exception->getLine();
  102. if(isset($backtrace[0]['args']) && is_array($backtrace[0]['args']))
  103. $backtrace[0]['args'] = array();
  104. if(isset($backtrace[0]['file']))
  105. $file = $backtrace[0]['file'];
  106. if(isset($backtrace[0]['line']))
  107. $line = $backtrace[0]['line'];
  108. // print_r($backtrace[0]);
  109. self::handleError($exception->getCode(), $exception->getMessage(), $file, $line, NULL, $backtrace);
  110. }
  111. }