'Error', E_WARNING => 'Warning', E_PARSE => 'Parsing Error', E_NOTICE => 'Notice', E_CORE_ERROR => 'Core Error', E_CORE_WARNING => 'Core Warning', E_COMPILE_ERROR => 'Compile Error', E_COMPILE_WARNING => 'Compile Warning', E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', E_STRICT => 'Runtime Notice' ); $severity = (isset($levels[$severity])) ? $levels[$severity] : $severity; // Contain the content for buffering ob_start(); // Extract the data array include(APP_PATH.'/errors/error.php'); $buffer = ob_get_contents(); ob_end_clean(); echo $buffer; } /** * Custom exception handler */ function on_exception($exception) { // these are our templates $traceline = "#%s %s(%s): %s(%s)"; $msg = "PHP Fatal error: Uncaught exception '%s' with message '%s' in %s:%s
Stack trace:
%s
thrown in %s on line %s"; // alter your trace as you please, here $trace = $exception->getTrace(); /*foreach ($trace as $key => $stackPoint) { // I'm converting arguments to their type // (prevents passwords from ever getting logged as anything other than 'string') $trace[$key]['args'] = array_map('gettype', $trace[$key]['args']); }*/ // build your tracelines $result = array(); foreach ($trace as $key => $stackPoint) { $result[] = sprintf( $traceline, $key, $stackPoint['file'], $stackPoint['line'], $stackPoint['function'], implode(', ', $stackPoint['args']) ); } // trace always ends with {main} $result[] = '#' . ++$key . ' {main}'; // write tracelines into main template $msg = sprintf( $msg, get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine(), implode("
", $result), $exception->getFile(), $exception->getLine() ); echo $msg; } //Set error handlers set_error_handler('on_error'); set_exception_handler('on_exception'); /** * JSObject * * Class for creating object-literal-like constructs in PHP */ class JSObject { /** * Constructor for creating the objects */ function __construct() { $args = func_get_args(); $members = $args[0]; // Add the passed parameters to the object foreach($members as $name => $value) { if(is_array($value)) { $value = new JSObject($value); } $this->$name = $value; } } /** * PHP magic method to facilitate dynamic methods * * @param string $name * @param array $args */ function __call($name, $args) { if(is_callable($this->$name)) { //Call the dynamic function return call_user_func_array($this->$name, $args); } } /** * Prints out the contents of the object when used as a string * * @return string */ function __toString() { $args = func_get_args(); $method = ( ! empty($args)) ? $args[0] : "print_r"; $output = '
';
	
		if($method == "var_dump")
		{
			ob_start();
			var_dump($this);
			$output .= ob_get_contents();
			ob_end_clean();
		}
		else if($method == "var_export")
		{
			ob_start();
			var_export($this);
			$output .= ob_get_contents();
			ob_end_clean();
		}	
		else
		{
			$output .= print_r($this, TRUE);
		}
	
		return $output . '
'; } /** * Constructor without the "new" * * @param array $members */ function __invoke($members=array()) { return new JSObject($members); } }