Revision 1257 | Revision 2107 | Zur aktuellen Revision | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** CodeIgniter** An open source application development framework for PHP** This content is released under the MIT License (MIT)** Copyright (c) 2014 - 2017, British Columbia Institute of Technology** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.** @package CodeIgniter* @author EllisLab Dev Team* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)* @copyright Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/)* @license http://opensource.org/licenses/MIT MIT License* @link https://codeigniter.com* @since Version 1.0.0* @filesource*/defined('BASEPATH') OR exit('No direct script access allowed');/*** Exceptions Class** @package CodeIgniter* @subpackage Libraries* @category Exceptions* @author EllisLab Dev Team* @link https://codeigniter.com/user_guide/libraries/exceptions.html*/class CI_Exceptions {/*** Nesting level of the output buffering mechanism** @var int*/public $ob_level;/*** List of available error levels** @var array*/public $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');/*** Class constructor** @return void*/public function __construct(){$this->ob_level = ob_get_level();// Note: Do not log messages from this constructor.}// --------------------------------------------------------------------/*** Exception Logger** Logs PHP generated error messages** @param int $severity Log level* @param string $message Error message* @param string $filepath File path* @param int $line Line number* @return void*/public function log_exception($severity, $message, $filepath, $line){$severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity;log_message('error', 'Severity: '.$severity.' --> '.$message.' '.$filepath.' '.$line);}// --------------------------------------------------------------------/*** 404 Error Handler** @uses CI_Exceptions::show_error()** @param string $page Page URI* @param bool $log_error Whether to log the error* @return void*/public function show_404($page = '', $log_error = TRUE){if (is_cli()){$heading = 'Not Found';$message = 'The controller/method pair you requested was not found.';}else{$heading = '404 Page Not Found';$message = 'The page you requested was not found.';}// By default we log this, but allow a dev to skip itif ($log_error){log_message('error', $heading.': '.$page);}echo $this->show_error($heading, $message, 'error_404', 404);exit(4); // EXIT_UNKNOWN_FILE}// --------------------------------------------------------------------/*** General Error Page** Takes an error message as input (either as a string or an array)* and displays it using the specified template.** @param string $heading Page heading* @param string|string[] $message Error message* @param string $template Template name* @param int $status_code (default: 500)** @return string Error page output*/public function show_error($heading, $message, $template = 'error_general', $status_code = 500){$templates_path = config_item('error_views_path');if (empty($templates_path)){$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;}if (is_cli()){$message = "\t".(is_array($message) ? implode("\n\t", $message) : $message);$template = 'cli'.DIRECTORY_SEPARATOR.$template;}else{set_status_header($status_code);$message = '<p>'.(is_array($message) ? implode('</p><p>', $message) : $message).'</p>';$template = 'html'.DIRECTORY_SEPARATOR.$template;}if (ob_get_level() > $this->ob_level + 1){ob_end_flush();}ob_start();include($templates_path.$template.'.php');$buffer = ob_get_contents();ob_end_clean();return $buffer;}// --------------------------------------------------------------------public function show_exception($exception){$templates_path = config_item('error_views_path');if (empty($templates_path)){$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;}$message = $exception->getMessage();if (empty($message)){$message = '(null)';}if (is_cli()){$templates_path .= 'cli'.DIRECTORY_SEPARATOR;}else{$templates_path .= 'html'.DIRECTORY_SEPARATOR;}if (ob_get_level() > $this->ob_level + 1){ob_end_flush();}ob_start();include($templates_path.'error_exception.php');$buffer = ob_get_contents();ob_end_clean();echo $buffer;}// --------------------------------------------------------------------/*** Native PHP error handler** @param int $severity Error level* @param string $message Error message* @param string $filepath File path* @param int $line Line number* @return string Error page output*/public function show_php_error($severity, $message, $filepath, $line){$templates_path = config_item('error_views_path');if (empty($templates_path)){$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;}$severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity;// For safety reasons we don't show the full file path in non-CLI requestsif ( ! is_cli()){$filepath = str_replace('\\', '/', $filepath);if (FALSE !== strpos($filepath, '/')){$x = explode('/', $filepath);$filepath = $x[count($x)-2].'/'.end($x);}$template = 'html'.DIRECTORY_SEPARATOR.'error_php';}else{$template = 'cli'.DIRECTORY_SEPARATOR.'error_php';}if (ob_get_level() > $this->ob_level + 1){ob_end_flush();}ob_start();include($templates_path.$template.'.php');$buffer = ob_get_contents();ob_end_clean();echo $buffer;}}