blob: f12d992f8464929a73075d8d69c01a0620dde5a8 [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001##############
2Error Handling
3##############
4
5CodeIgniter lets you build error reporting into your applications using
6the functions described below. In addition, it has an error logging
7class that permits error and debugging messages to be saved as text
8files.
9
10.. note:: By default, CodeIgniter displays all PHP errors. You might
11 wish to change this behavior once your development is complete. You'll
12 find the error_reporting() function located at the top of your main
13 index.php file. Disabling error reporting will NOT prevent log files
14 from being written if there are errors.
15
16Unlike most systems in CodeIgniter, the error functions are simple
17procedural interfaces that are available globally throughout the
18application. This approach permits error messages to get triggered
19without having to worry about class/function scoping.
20
Daniel Hunsaker3b5b7f42013-02-22 19:17:56 -070021CodeIgniter also returns a status code whenever a portion of the core
22calls ``exit()``. This exit status code is separate from the HTTP status
23code, and serves as a notice to other processes that may be watching of
24whether the script completed successfully, or if not, what kind of
25problem it encountered that caused it to abort. These values are
26defined in *application/config/constants.php*. While exit status codes
27are most useful in CLI settings, returning the proper code helps server
28software keep track of your scripts and the health of your application.
29
Derek Jones8ede1a22011-10-05 13:34:52 -050030The following functions let you generate errors:
31
Andrey Andreev16a704c2012-11-09 17:25:00 +020032show_error()
33============
34
35.. php:function:: show_error($message, $status_code, $heading = 'An Error Was Encountered')
36
37 :param mixed $message: Error message
38 :param int $status_code: HTTP Response status code
39 :param string $heading: Error page heading
40 :returns: void
Derek Jones8ede1a22011-10-05 13:34:52 -050041
42This function will display the error message supplied to it using the
Andrey Andreev16a704c2012-11-09 17:25:00 +020043following error template::
Derek Jones8ede1a22011-10-05 13:34:52 -050044
vlakoff52301c72013-03-29 14:23:34 +010045 application/views/errors/error_general.php
Derek Jones8ede1a22011-10-05 13:34:52 -050046
Andrey Andreev16a704c2012-11-09 17:25:00 +020047The optional parameter ``$status_code`` determines what HTTP status
Daniel Hunsaker3b5b7f42013-02-22 19:17:56 -070048code should be sent with the error. If ``$status_code`` is less than 100,
49the HTTP status code will be set to 500, and the exit status code will
50be set to ``$status_code + EXIT__AUTO_MIN``. If that value is larger than
51``EXIT__AUTO_MAX``, or if ``$status_code`` is 100 or higher, the exit
Daniel Hunsaker50dfe012013-03-04 02:05:20 -070052status code will be set to ``EXIT_ERROR``. You can check in
Daniel Hunsaker3b5b7f42013-02-22 19:17:56 -070053*application/config/constants.php* for more detail.
Derek Jones8ede1a22011-10-05 13:34:52 -050054
Andrey Andreev16a704c2012-11-09 17:25:00 +020055show_404()
56==========
57
58.. php:function:: show_404($page = '', $log_error = TRUE)
59
60 :param string $page: URI string
61 :param bool $log_error: Whether to log the error
62 :returns: void
Derek Jones8ede1a22011-10-05 13:34:52 -050063
64This function will display the 404 error message supplied to it using
Andrey Andreev16a704c2012-11-09 17:25:00 +020065the following error template::
Derek Jones8ede1a22011-10-05 13:34:52 -050066
vlakoff52301c72013-03-29 14:23:34 +010067 application/views/errors/error_404.php
Derek Jones8ede1a22011-10-05 13:34:52 -050068
69The function expects the string passed to it to be the file path to the
Daniel Hunsaker50dfe012013-03-04 02:05:20 -070070page that isn't found. The exit status code will be set to ``EXIT_UNKNOWN_FILE``.
Daniel Hunsaker3b5b7f42013-02-22 19:17:56 -070071Note that CodeIgniter automatically shows 404 messages if controllers are
72not found.
Derek Jones8ede1a22011-10-05 13:34:52 -050073
Andrey Andreev16a704c2012-11-09 17:25:00 +020074CodeIgniter automatically logs any ``show_404()`` calls. Setting the
Derek Jones8ede1a22011-10-05 13:34:52 -050075optional second parameter to FALSE will skip logging.
76
Andrey Andreev16a704c2012-11-09 17:25:00 +020077log_message()
78=============
79
vlakoffd0c30ab2013-05-07 07:49:23 +020080.. php:function:: log_message($level, $message, $php_error = FALSE)
Andrey Andreev16a704c2012-11-09 17:25:00 +020081
vlakoffd0c30ab2013-05-07 07:49:23 +020082 :param string $level: Log level: 'error', 'debug' or 'info'
Andrey Andreev16a704c2012-11-09 17:25:00 +020083 :param string $message: Message to log
vlakoffd0c30ab2013-05-07 07:49:23 +020084 :param bool $php_error: Whether we're logging a native PHP error message
Andrey Andreev16a704c2012-11-09 17:25:00 +020085 :returns: void
Derek Jones8ede1a22011-10-05 13:34:52 -050086
87This function lets you write messages to your log files. You must supply
88one of three "levels" in the first parameter, indicating what type of
89message it is (debug, error, info), with the message itself in the
Andrey Andreev16a704c2012-11-09 17:25:00 +020090second parameter.
Derek Jones8ede1a22011-10-05 13:34:52 -050091
Andrey Andreev16a704c2012-11-09 17:25:00 +020092Example::
93
94 if ($some_var == '')
Derek Jones9713cce2011-10-05 17:26:43 -050095 {
Andrey Andreev16a704c2012-11-09 17:25:00 +020096 log_message('error', 'Some variable did not contain a value.');
Derek Jones9713cce2011-10-05 17:26:43 -050097 }
98 else
99 {
Andrey Andreev16a704c2012-11-09 17:25:00 +0200100 log_message('debug', 'Some variable was correctly set');
Derek Jones9713cce2011-10-05 17:26:43 -0500101 }
102
103 log_message('info', 'The purpose of some variable is to provide some value.');
Derek Jones8ede1a22011-10-05 13:34:52 -0500104
105There are three message types:
106
107#. Error Messages. These are actual errors, such as PHP errors or user
108 errors.
109#. Debug Messages. These are messages that assist in debugging. For
110 example, if a class has been initialized, you could log this as
111 debugging info.
112#. Informational Messages. These are the lowest priority messages,
113 simply giving information regarding some process. CodeIgniter doesn't
114 natively generate any info messages but you may want to in your
115 application.
116
Andrey Andreev16a704c2012-11-09 17:25:00 +0200117.. note:: In order for the log file to actually be written, the *logs*
118 directory must be writable. In addition, you must set the "threshold"
119 for logging in *application/config/config.php*. You might, for example,
120 only want error messages to be logged, and not the other two types.
121 If you set it to zero logging will be disabled.