Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 1 | ############## |
| 2 | Error Handling |
| 3 | ############## |
| 4 | |
| 5 | CodeIgniter lets you build error reporting into your applications using |
| 6 | the functions described below. In addition, it has an error logging |
| 7 | class that permits error and debugging messages to be saved as text |
| 8 | files. |
| 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 | |
| 16 | Unlike most systems in CodeIgniter, the error functions are simple |
| 17 | procedural interfaces that are available globally throughout the |
| 18 | application. This approach permits error messages to get triggered |
| 19 | without having to worry about class/function scoping. |
| 20 | |
| 21 | The following functions let you generate errors: |
| 22 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 23 | show_error() |
| 24 | ============ |
| 25 | |
| 26 | .. php:function:: show_error($message, $status_code, $heading = 'An Error Was Encountered') |
| 27 | |
| 28 | :param mixed $message: Error message |
| 29 | :param int $status_code: HTTP Response status code |
| 30 | :param string $heading: Error page heading |
| 31 | :returns: void |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 32 | |
| 33 | This function will display the error message supplied to it using the |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 34 | following error template:: |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 35 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 36 | application/errors/error_general.php |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 37 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 38 | The optional parameter ``$status_code`` determines what HTTP status |
| 39 | code should be sent with the error. |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 40 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 41 | show_404() |
| 42 | ========== |
| 43 | |
| 44 | .. php:function:: show_404($page = '', $log_error = TRUE) |
| 45 | |
| 46 | :param string $page: URI string |
| 47 | :param bool $log_error: Whether to log the error |
| 48 | :returns: void |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 49 | |
| 50 | This function will display the 404 error message supplied to it using |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 51 | the following error template:: |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 52 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 53 | application/errors/error_404.php |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 54 | |
| 55 | The function expects the string passed to it to be the file path to the |
| 56 | page that isn't found. Note that CodeIgniter automatically shows 404 |
| 57 | messages if controllers are not found. |
| 58 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 59 | CodeIgniter automatically logs any ``show_404()`` calls. Setting the |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 60 | optional second parameter to FALSE will skip logging. |
| 61 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 62 | log_message() |
| 63 | ============= |
| 64 | |
| 65 | .. php:function:: log_message($level = 'error', $message, $php_error = FALSE) |
| 66 | |
| 67 | :param string $level: Log level |
| 68 | :param string $message: Message to log |
| 69 | :param bool $php_error: Whether we're loggin a native PHP error message |
| 70 | :returns: void |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 71 | |
| 72 | This function lets you write messages to your log files. You must supply |
| 73 | one of three "levels" in the first parameter, indicating what type of |
| 74 | message it is (debug, error, info), with the message itself in the |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 75 | second parameter. |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 76 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 77 | Example:: |
| 78 | |
| 79 | if ($some_var == '') |
Derek Jones | 9713cce | 2011-10-05 17:26:43 -0500 | [diff] [blame] | 80 | { |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 81 | log_message('error', 'Some variable did not contain a value.'); |
Derek Jones | 9713cce | 2011-10-05 17:26:43 -0500 | [diff] [blame] | 82 | } |
| 83 | else |
| 84 | { |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 85 | log_message('debug', 'Some variable was correctly set'); |
Derek Jones | 9713cce | 2011-10-05 17:26:43 -0500 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | log_message('info', 'The purpose of some variable is to provide some value.'); |
Derek Jones | 8ede1a2 | 2011-10-05 13:34:52 -0500 | [diff] [blame] | 89 | |
| 90 | There are three message types: |
| 91 | |
| 92 | #. Error Messages. These are actual errors, such as PHP errors or user |
| 93 | errors. |
| 94 | #. Debug Messages. These are messages that assist in debugging. For |
| 95 | example, if a class has been initialized, you could log this as |
| 96 | debugging info. |
| 97 | #. Informational Messages. These are the lowest priority messages, |
| 98 | simply giving information regarding some process. CodeIgniter doesn't |
| 99 | natively generate any info messages but you may want to in your |
| 100 | application. |
| 101 | |
Andrey Andreev | 16a704c | 2012-11-09 17:25:00 +0200 | [diff] [blame] | 102 | .. note:: In order for the log file to actually be written, the *logs* |
| 103 | directory must be writable. In addition, you must set the "threshold" |
| 104 | for logging in *application/config/config.php*. You might, for example, |
| 105 | only want error messages to be logged, and not the other two types. |
| 106 | If you set it to zero logging will be disabled. |