blob: 6a63ca733f1a5cbbb9c683d4a973d99be13b7aaf [file] [log] [blame]
Derek Jones37f4b9c2011-07-01 17:56:50 -05001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
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
Greg Aker0711dc82011-01-05 10:49:40 -06009 * @copyright Copyright (c) 2008 - 2011, 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;
David Behler209b2cf2011-08-14 23:00:43 +020033
34 /**
35 * Nesting level of the output buffering mechanism
36 * Used to
37 *
38 * @var int
39 * @access public
40 */
Derek Allard2067d1a2008-11-13 22:59:24 +000041 var $ob_level;
42
David Behler209b2cf2011-08-14 23:00:43 +020043 /**
44 * List if available error levels
45 *
46 * @var array
47 * @access public
48 */
Derek Allard2067d1a2008-11-13 22:59:24 +000049 var $levels = array(
50 E_ERROR => 'Error',
51 E_WARNING => 'Warning',
52 E_PARSE => 'Parsing Error',
53 E_NOTICE => 'Notice',
54 E_CORE_ERROR => 'Core Error',
55 E_CORE_WARNING => 'Core Warning',
56 E_COMPILE_ERROR => 'Compile Error',
57 E_COMPILE_WARNING => 'Compile Warning',
58 E_USER_ERROR => 'User Error',
59 E_USER_WARNING => 'User Warning',
60 E_USER_NOTICE => 'User Notice',
61 E_STRICT => 'Runtime Notice'
62 );
63
64
65 /**
66 * Constructor
Barry Mienydd671972010-10-04 16:33:58 +020067 */
Greg Akera9263282010-11-10 15:26:43 -060068 public function __construct()
Derek Allard2067d1a2008-11-13 22:59:24 +000069 {
70 $this->ob_level = ob_get_level();
Derek Jones37f4b9c2011-07-01 17:56:50 -050071 // Note: Do not log messages from this constructor.
Derek Allard2067d1a2008-11-13 22:59:24 +000072 }
Barry Mienydd671972010-10-04 16:33:58 +020073
Derek Allard2067d1a2008-11-13 22:59:24 +000074 // --------------------------------------------------------------------
75
76 /**
77 * Exception Logger
78 *
79 * This function logs PHP generated error messages
80 *
81 * @access private
82 * @param string the error severity
83 * @param string the error string
84 * @param string the error filepath
85 * @param string the error line number
86 * @return string
87 */
88 function log_exception($severity, $message, $filepath, $line)
Barry Mienydd671972010-10-04 16:33:58 +020089 {
Derek Allard2067d1a2008-11-13 22:59:24 +000090 $severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
Barry Mienydd671972010-10-04 16:33:58 +020091
Derek Jones37f4b9c2011-07-01 17:56:50 -050092 log_message('error', 'Severity: '.$severity.' --> '.$message. ' '.$filepath.' '.$line, TRUE);
Derek Allard2067d1a2008-11-13 22:59:24 +000093 }
94
95 // --------------------------------------------------------------------
96
97 /**
98 * 404 Page Not Found Handler
99 *
100 * @access private
101 * @param string
102 * @return string
103 */
Derek Allard2ddc9492010-08-05 10:08:33 -0400104 function show_404($page = '', $log_error = TRUE)
Barry Mienydd671972010-10-04 16:33:58 +0200105 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000106 $heading = "404 Page Not Found";
107 $message = "The page you requested was not found.";
108
Derek Allard2ddc9492010-08-05 10:08:33 -0400109 // By default we log this, but allow a dev to skip it
110 if ($log_error)
111 {
112 log_message('error', '404 Page Not Found --> '.$page);
113 }
114
Derek Jonesf6b442b2009-07-11 18:23:30 +0000115 echo $this->show_error($heading, $message, 'error_404', 404);
Derek Allard2067d1a2008-11-13 22:59:24 +0000116 exit;
117 }
Barry Mienydd671972010-10-04 16:33:58 +0200118
Derek Allard2067d1a2008-11-13 22:59:24 +0000119 // --------------------------------------------------------------------
120
121 /**
122 * General Error Page
123 *
124 * This function takes an error message as input
125 * (either as a string or an array) and displays
126 * it using the specified template.
127 *
128 * @access private
129 * @param string the heading
130 * @param string the message
131 * @param string the template name
132 * @return string
133 */
Derek Jones817163a2009-07-11 17:05:58 +0000134 function show_error($heading, $message, $template = 'error_general', $status_code = 500)
Derek Allard2067d1a2008-11-13 22:59:24 +0000135 {
Derek Jones817163a2009-07-11 17:05:58 +0000136 set_status_header($status_code);
Barry Mienydd671972010-10-04 16:33:58 +0200137
Derek Allard2067d1a2008-11-13 22:59:24 +0000138 $message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';
139
140 if (ob_get_level() > $this->ob_level + 1)
141 {
Barry Mienydd671972010-10-04 16:33:58 +0200142 ob_end_flush();
Derek Allard2067d1a2008-11-13 22:59:24 +0000143 }
144 ob_start();
Greg Aker3a746652011-04-19 10:59:47 -0500145 include(APPPATH.'errors/'.$template.'.php');
Derek Allard2067d1a2008-11-13 22:59:24 +0000146 $buffer = ob_get_contents();
147 ob_end_clean();
148 return $buffer;
149 }
150
151 // --------------------------------------------------------------------
152
153 /**
154 * Native PHP error handler
155 *
156 * @access private
157 * @param string the error severity
158 * @param string the error string
159 * @param string the error filepath
160 * @param string the error line number
161 * @return string
162 */
163 function show_php_error($severity, $message, $filepath, $line)
Barry Mienydd671972010-10-04 16:33:58 +0200164 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000165 $severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
Barry Mienydd671972010-10-04 16:33:58 +0200166
Derek Allard2067d1a2008-11-13 22:59:24 +0000167 $filepath = str_replace("\\", "/", $filepath);
Barry Mienydd671972010-10-04 16:33:58 +0200168
Derek Allard2067d1a2008-11-13 22:59:24 +0000169 // For safety reasons we do not show the full file path
170 if (FALSE !== strpos($filepath, '/'))
171 {
172 $x = explode('/', $filepath);
173 $filepath = $x[count($x)-2].'/'.end($x);
174 }
Barry Mienydd671972010-10-04 16:33:58 +0200175
Derek Allard2067d1a2008-11-13 22:59:24 +0000176 if (ob_get_level() > $this->ob_level + 1)
177 {
Barry Mienydd671972010-10-04 16:33:58 +0200178 ob_end_flush();
Derek Allard2067d1a2008-11-13 22:59:24 +0000179 }
180 ob_start();
Greg Aker3a746652011-04-19 10:59:47 -0500181 include(APPPATH.'errors/error_php.php');
Derek Allard2067d1a2008-11-13 22:59:24 +0000182 $buffer = ob_get_contents();
183 ob_end_clean();
184 echo $buffer;
185 }
186
187
188}
189// END Exceptions Class
190
191/* End of file Exceptions.php */
Derek Jonesc68dfbf2010-03-02 12:59:23 -0600192/* Location: ./system/core/Exceptions.php */