178 lines
No EOL
4.3 KiB
PHP
178 lines
No EOL
4.3 KiB
PHP
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
/**
|
|
* CodeIgniter
|
|
*
|
|
* An open source application development framework for PHP 5.1.6 or newer
|
|
*
|
|
* @package CodeIgniter
|
|
* @author ExpressionEngine Dev Team
|
|
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
|
|
* @license http://codeigniter.com/user_guide/license.html
|
|
* @link http://codeigniter.com
|
|
* @since Version 1.0
|
|
* @filesource
|
|
*/
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Exceptions Class
|
|
*
|
|
* @package CodeIgniter
|
|
* @subpackage Libraries
|
|
* @category Exceptions
|
|
* @author ExpressionEngine Dev Team
|
|
* @link http://codeigniter.com/user_guide/libraries/exceptions.html
|
|
*/
|
|
class CI_Exceptions {
|
|
var $action;
|
|
var $severity;
|
|
var $message;
|
|
var $filename;
|
|
var $line;
|
|
var $ob_level;
|
|
|
|
var $levels = array(
|
|
E_ERROR => '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'
|
|
);
|
|
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->ob_level = ob_get_level();
|
|
// Note: Do not log messages from this constructor.
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
/**
|
|
* Exception Logger
|
|
*
|
|
* This function logs PHP generated error messages
|
|
*
|
|
* @access private
|
|
* @param string the error severity
|
|
* @param string the error string
|
|
* @param string the error filepath
|
|
* @param string the error line number
|
|
* @return string
|
|
*/
|
|
function log_exception($severity, $message, $filepath, $line)
|
|
{
|
|
$severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
|
|
|
|
log_message('error', 'Severity: '.$severity.' --> '.$message. ' '.$filepath.' '.$line, TRUE);
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
/**
|
|
* 404 Page Not Found Handler
|
|
*
|
|
* @access private
|
|
* @param string
|
|
* @return string
|
|
*/
|
|
function show_404($page = '', $log_error = TRUE)
|
|
{
|
|
$heading = "404 Page Not Found";
|
|
$message = "The page you requested was not found.";
|
|
|
|
// By default we log this, but allow a dev to skip it
|
|
if ($log_error)
|
|
{
|
|
log_message('error', '404 Page Not Found --> '.$page);
|
|
}
|
|
|
|
echo $this->show_error($heading, $message, 'error_404', 404);
|
|
exit;
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
/**
|
|
* General Error Page
|
|
*
|
|
* This function takes an error message as input
|
|
* (either as a string or an array) and displays
|
|
* it using the specified template.
|
|
*
|
|
* @access private
|
|
* @param string the heading
|
|
* @param string the message
|
|
* @param string the template name
|
|
* @return string
|
|
*/
|
|
function show_error($heading, $message, $template = 'error_general', $status_code = 500)
|
|
{
|
|
set_status_header($status_code);
|
|
|
|
$message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';
|
|
|
|
if (ob_get_level() > $this->ob_level + 1)
|
|
{
|
|
ob_end_flush();
|
|
}
|
|
ob_start();
|
|
include(APPPATH.'errors/'.$template.'.php');
|
|
$buffer = ob_get_contents();
|
|
ob_end_clean();
|
|
return $buffer;
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
/**
|
|
* Native PHP error handler
|
|
*
|
|
* @access private
|
|
* @param string the error severity
|
|
* @param string the error string
|
|
* @param string the error filepath
|
|
* @param string the error line number
|
|
* @return string
|
|
*/
|
|
function show_php_error($severity, $message, $filepath, $line)
|
|
{
|
|
$severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
|
|
|
|
$filepath = str_replace("\\", "/", $filepath);
|
|
|
|
// For safety reasons we do not show the full file path
|
|
if (FALSE !== strpos($filepath, '/'))
|
|
{
|
|
$x = explode('/', $filepath);
|
|
$filepath = $x[count($x)-2].'/'.end($x);
|
|
}
|
|
|
|
if (ob_get_level() > $this->ob_level + 1)
|
|
{
|
|
ob_end_flush();
|
|
}
|
|
ob_start();
|
|
include(APPPATH.'errors/error_php.php');
|
|
$buffer = ob_get_contents();
|
|
ob_end_clean();
|
|
echo $buffer;
|
|
}
|
|
|
|
|
|
}
|
|
// END Exceptions Class
|
|
|
|
/* End of file Exceptions.php */
|
|
/* Location: ./system/core/Exceptions.php */ |