blob: 32cb77baf585b78631262db0beff0ebbb9dec38f [file] [log] [blame]
Derek Allard2067d1a2008-11-13 22:59:24 +00001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
Derek Jones7f3719f2010-01-05 13:35:37 +00009 * @copyright Copyright (c) 2008 - 2010, EllisLab, Inc.
Derek Allard2067d1a2008-11-13 22:59:24 +000010 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Exceptions Class
20 *
21 * @package CodeIgniter
22 * @subpackage Libraries
23 * @category Exceptions
24 * @author ExpressionEngine Dev Team
25 * @link http://codeigniter.com/user_guide/libraries/exceptions.html
26 */
27class CI_Exceptions {
28 var $action;
29 var $severity;
30 var $message;
31 var $filename;
32 var $line;
33 var $ob_level;
34
35 var $levels = array(
36 E_ERROR => 'Error',
37 E_WARNING => 'Warning',
38 E_PARSE => 'Parsing Error',
39 E_NOTICE => 'Notice',
40 E_CORE_ERROR => 'Core Error',
41 E_CORE_WARNING => 'Core Warning',
42 E_COMPILE_ERROR => 'Compile Error',
43 E_COMPILE_WARNING => 'Compile Warning',
44 E_USER_ERROR => 'User Error',
45 E_USER_WARNING => 'User Warning',
46 E_USER_NOTICE => 'User Notice',
47 E_STRICT => 'Runtime Notice'
48 );
49
50
51 /**
52 * Constructor
Barry Mienydd671972010-10-04 16:33:58 +020053 */
Greg Akera9263282010-11-10 15:26:43 -060054 public function __construct()
Derek Allard2067d1a2008-11-13 22:59:24 +000055 {
56 $this->ob_level = ob_get_level();
57 // Note: Do not log messages from this constructor.
58 }
Barry Mienydd671972010-10-04 16:33:58 +020059
Derek Allard2067d1a2008-11-13 22:59:24 +000060 // --------------------------------------------------------------------
61
62 /**
63 * Exception Logger
64 *
65 * This function logs PHP generated error messages
66 *
67 * @access private
68 * @param string the error severity
69 * @param string the error string
70 * @param string the error filepath
71 * @param string the error line number
72 * @return string
73 */
74 function log_exception($severity, $message, $filepath, $line)
Barry Mienydd671972010-10-04 16:33:58 +020075 {
Derek Allard2067d1a2008-11-13 22:59:24 +000076 $severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
Barry Mienydd671972010-10-04 16:33:58 +020077
Derek Allard2067d1a2008-11-13 22:59:24 +000078 log_message('error', 'Severity: '.$severity.' --> '.$message. ' '.$filepath.' '.$line, TRUE);
79 }
80
81 // --------------------------------------------------------------------
82
83 /**
84 * 404 Page Not Found Handler
85 *
86 * @access private
87 * @param string
88 * @return string
89 */
Derek Allard2ddc9492010-08-05 10:08:33 -040090 function show_404($page = '', $log_error = TRUE)
Barry Mienydd671972010-10-04 16:33:58 +020091 {
Derek Allard2067d1a2008-11-13 22:59:24 +000092 $heading = "404 Page Not Found";
93 $message = "The page you requested was not found.";
94
Derek Allard2ddc9492010-08-05 10:08:33 -040095 // By default we log this, but allow a dev to skip it
96 if ($log_error)
97 {
98 log_message('error', '404 Page Not Found --> '.$page);
99 }
100
Derek Jonesf6b442b2009-07-11 18:23:30 +0000101 echo $this->show_error($heading, $message, 'error_404', 404);
Derek Allard2067d1a2008-11-13 22:59:24 +0000102 exit;
103 }
Barry Mienydd671972010-10-04 16:33:58 +0200104
Derek Allard2067d1a2008-11-13 22:59:24 +0000105 // --------------------------------------------------------------------
106
107 /**
108 * General Error Page
109 *
110 * This function takes an error message as input
111 * (either as a string or an array) and displays
112 * it using the specified template.
113 *
114 * @access private
115 * @param string the heading
116 * @param string the message
117 * @param string the template name
118 * @return string
119 */
Derek Jones817163a2009-07-11 17:05:58 +0000120 function show_error($heading, $message, $template = 'error_general', $status_code = 500)
Derek Allard2067d1a2008-11-13 22:59:24 +0000121 {
Derek Jones817163a2009-07-11 17:05:58 +0000122 set_status_header($status_code);
Barry Mienydd671972010-10-04 16:33:58 +0200123
Derek Allard2067d1a2008-11-13 22:59:24 +0000124 $message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';
125
126 if (ob_get_level() > $this->ob_level + 1)
127 {
Barry Mienydd671972010-10-04 16:33:58 +0200128 ob_end_flush();
Derek Allard2067d1a2008-11-13 22:59:24 +0000129 }
130 ob_start();
131 include(APPPATH.'errors/'.$template.EXT);
132 $buffer = ob_get_contents();
133 ob_end_clean();
134 return $buffer;
135 }
136
137 // --------------------------------------------------------------------
138
139 /**
140 * Native PHP error handler
141 *
142 * @access private
143 * @param string the error severity
144 * @param string the error string
145 * @param string the error filepath
146 * @param string the error line number
147 * @return string
148 */
149 function show_php_error($severity, $message, $filepath, $line)
Barry Mienydd671972010-10-04 16:33:58 +0200150 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000151 $severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
Barry Mienydd671972010-10-04 16:33:58 +0200152
Derek Allard2067d1a2008-11-13 22:59:24 +0000153 $filepath = str_replace("\\", "/", $filepath);
Barry Mienydd671972010-10-04 16:33:58 +0200154
Derek Allard2067d1a2008-11-13 22:59:24 +0000155 // For safety reasons we do not show the full file path
156 if (FALSE !== strpos($filepath, '/'))
157 {
158 $x = explode('/', $filepath);
159 $filepath = $x[count($x)-2].'/'.end($x);
160 }
Barry Mienydd671972010-10-04 16:33:58 +0200161
Derek Allard2067d1a2008-11-13 22:59:24 +0000162 if (ob_get_level() > $this->ob_level + 1)
163 {
Barry Mienydd671972010-10-04 16:33:58 +0200164 ob_end_flush();
Derek Allard2067d1a2008-11-13 22:59:24 +0000165 }
166 ob_start();
167 include(APPPATH.'errors/error_php'.EXT);
168 $buffer = ob_get_contents();
169 ob_end_clean();
170 echo $buffer;
171 }
172
173
174}
175// END Exceptions Class
176
177/* End of file Exceptions.php */
Derek Jonesc68dfbf2010-03-02 12:59:23 -0600178/* Location: ./system/core/Exceptions.php */