'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); } }