blob: d5bec77fec513b3e06e4b909e18da59dfb9d0131 [file] [log] [blame]
adminb0dd10f2006-08-25 17:25:49 +00001<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
2/**
3 * Code Igniter
4 *
5 * An open source application development framework for PHP 4.3.2 or newer
6 *
7 * @package CodeIgniter
8 * @author Rick Ellis
9 * @copyright Copyright (c) 2006, pMachine, Inc.
10 * @license http://www.codeignitor.com/user_guide/license.html
11 * @link http://www.codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Common Functions
20 *
21 * Loads the base classes and executes the request.
22 *
23 * @package CodeIgniter
24 * @subpackage codeigniter
25 * @category Common Functions
26 * @author Rick Ellis
27 * @link http://www.codeigniter.com/user_guide/
28 */
29
30// ------------------------------------------------------------------------
31
32/**
33* Class registry
34*
35*
36* @access public
37* @return object
38*/
39function &_load_class($class, $instantiate = TRUE)
40{
41 static $objects;
42
43 if ( ! isset($objects[$class]))
44 {
45 if (FALSE !== strpos($class, 'CI_'))
46 {
47 if (file_exists(APPPATH.'libraries/'.str_replace('CI_', '', $class).EXT))
48 {
49 require(APPPATH.'libraries/'.str_replace('CI_', '', $class).EXT);
50 }
51 else
52 {
53 require(BASEPATH.'libraries/'.str_replace('CI_', '', $class).EXT);
54 }
55 }
56
57 if ($instantiate == TRUE)
58 {
59 if ($class == 'CI_Controller')
60 $class = 'Controller';
61
62 $objects[$class] =& new $class();
63 }
64 else
65 {
adminb071bb52006-08-26 19:28:37 +000066 $objects[$class] = FALSE;
adminb0dd10f2006-08-25 17:25:49 +000067 }
68 }
69
adminb0dd10f2006-08-25 17:25:49 +000070 return $objects[$class];
71}
72
73/**
74* Loads the main config.php file
75*
76*
77* @access private
78* @return array
79*/
80function &_get_config()
81{
82 static $conf;
83
84 if ( ! isset($conf))
85 {
86 require(APPPATH.'config/config'.EXT);
87
88 if ( ! isset($config) OR ! is_array($config))
89 {
90 show_error('Your config file does not appear to be formatted correctly.');
91 }
92
93 $conf[0] =& $config;
94 }
95 return $conf[0];
96}
97
98
99/**
100* Error Handler
101*
102* This function lets us invoke the exception class and
103* display errors using the standard error template located
104* in application/errors/errors.php
105* This function will send the error page directly to the
106* browser and exit.
107*
108* @access public
109* @return void
110*/
111function show_error($message)
112{
113 if ( ! class_exists('CI_Exceptions'))
114 {
115 include_once(BASEPATH.'libraries/Exceptions.php');
116 }
117
118 $error = new CI_Exceptions();
119 echo $error->show_error('An Error Was Encountered', $message);
120 exit;
121}
122
123
124/**
125* 404 Page Handler
126*
127* This function is similar to the show_error() function above
128* However, instead of the standard error template it displays
129* 404 errors.
130*
131* @access public
132* @return void
133*/
134function show_404($page = '')
135{
136 if ( ! class_exists('CI_Exceptions'))
137 {
138 include_once(BASEPATH.'libraries/Exceptions.php');
139 }
140
141 $error = new CI_Exceptions();
142 $error->show_404($page);
143 exit;
144}
145
146
147/**
148* Error Logging Interface
149*
150* We use this as a simple mechanism to access the logging
151* class and send messages to be logged.
152*
153* @access public
154* @return void
155*/
admin57b3d392006-08-27 15:28:31 +0000156function log_message($level = 'error', $message, $php_error = FALSE)
adminb0dd10f2006-08-25 17:25:49 +0000157{
admin57b3d392006-08-27 15:28:31 +0000158 static $LOG;
159
adminb0dd10f2006-08-25 17:25:49 +0000160 $config =& _get_config();
161 if ($config['log_errors'] === FALSE)
162 {
163 return;
164 }
165
166 if ( ! class_exists('CI_Log'))
167 {
168 include_once(BASEPATH.'libraries/Log.php');
169 }
170
admin57b3d392006-08-27 15:28:31 +0000171 if ( ! is_object($LOG))
adminb0dd10f2006-08-25 17:25:49 +0000172 {
173 $LOG = new CI_Log(
174 $config['log_path'],
175 $config['log_threshold'],
176 $config['log_date_format']
177 );
178 }
179
180 $LOG->write_log($level, $message, $php_error);
181}
182
183
184/**
185* Exception Handler
186*
187* This is the custom exception handler we defined at the
188* top of this file. The main reason we use this is permit
189* PHP errors to be logged in our own log files since we may
190* not have access to server logs. Since this function
191* effectively intercepts PHP errors, however, we also need
192* to display errors based on the current error_reporting level.
193* We do that with the use of a PHP error template.
194*
195* @access private
196* @return void
197*/
198function _exception_handler($severity, $message, $filepath, $line)
199{
200 // We don't bother with "strict" notices since they will fill up
201 // the log file with information that isn't normally very
202 // helpful. For example, if you are running PHP 5 and you
203 // use version 4 style class functions (without prefixes
204 // like "public", "private", etc.) you'll get notices telling
205 // you that these have been deprecated.
206
207 if ($severity == E_STRICT)
208 {
209 return;
210 }
211
212 // Send the PHP error to the log file...
213 if ( ! class_exists('CI_Exceptions'))
214 {
215 include_once(BASEPATH.'libraries/Exceptions.php');
216 }
217 $error = new CI_Exceptions();
218
219 // Should we display the error?
220 // We'll get the current error_reporting level and add its bits
221 // with the severity bits to find out.
222
223 if (($severity & error_reporting()) == $severity)
224 {
225 $error->show_php_error($severity, $message, $filepath, $line);
226 }
227
228 // Should we log the error? No? We're done...
229 $config =& _get_config();
230 if ($config['log_errors'] === FALSE)
231 {
232 return;
233 }
234
235 $error->log_exception($severity, $message, $filepath, $line);
236}
237
238
239?>