blob: 4879e7099d65c40fe2927280f401779d562b7d63 [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*/
156function log_message($level = 2, $message, $php_error = FALSE)
157{
158 $config =& _get_config();
159 if ($config['log_errors'] === FALSE)
160 {
161 return;
162 }
163
164 if ( ! class_exists('CI_Log'))
165 {
166 include_once(BASEPATH.'libraries/Log.php');
167 }
168
169 if ( ! isset($LOG))
170 {
171 $LOG = new CI_Log(
172 $config['log_path'],
173 $config['log_threshold'],
174 $config['log_date_format']
175 );
176 }
177
178 $LOG->write_log($level, $message, $php_error);
179}
180
181
182/**
183* Exception Handler
184*
185* This is the custom exception handler we defined at the
186* top of this file. The main reason we use this is permit
187* PHP errors to be logged in our own log files since we may
188* not have access to server logs. Since this function
189* effectively intercepts PHP errors, however, we also need
190* to display errors based on the current error_reporting level.
191* We do that with the use of a PHP error template.
192*
193* @access private
194* @return void
195*/
196function _exception_handler($severity, $message, $filepath, $line)
197{
198 // We don't bother with "strict" notices since they will fill up
199 // the log file with information that isn't normally very
200 // helpful. For example, if you are running PHP 5 and you
201 // use version 4 style class functions (without prefixes
202 // like "public", "private", etc.) you'll get notices telling
203 // you that these have been deprecated.
204
205 if ($severity == E_STRICT)
206 {
207 return;
208 }
209
210 // Send the PHP error to the log file...
211 if ( ! class_exists('CI_Exceptions'))
212 {
213 include_once(BASEPATH.'libraries/Exceptions.php');
214 }
215 $error = new CI_Exceptions();
216
217 // Should we display the error?
218 // We'll get the current error_reporting level and add its bits
219 // with the severity bits to find out.
220
221 if (($severity & error_reporting()) == $severity)
222 {
223 $error->show_php_error($severity, $message, $filepath, $line);
224 }
225
226 // Should we log the error? No? We're done...
227 $config =& _get_config();
228 if ($config['log_errors'] === FALSE)
229 {
230 return;
231 }
232
233 $error->log_exception($severity, $message, $filepath, $line);
234}
235
236
237?>