You want to alter the error-logging sensitivity on a particular page. This lets you control what types of errors are reported.
To adjust the types of errors PHP complains about, use error_reporting( ):
error_reporting(E_ALL); // everything error_reporting(E_ERROR | E_PARSE); // only major problems error_reporting(E_ALL & ~E_NOTICE); // everything but notices
Every error generated has an error type associated with it. For example, if you try to array_pop( ) a string, PHP complains that "This argument needs to be an array," since you can only pop arrays. The error type associated with this message is E_NOTICE, a nonfatal runtime problem.
By default, the error reporting level is E_ALL & ~E_NOTICE, which means all error types except notices. The & is a logical AND, and the ~ is a logical NOT. However, the php.ini-recommended configuration file sets the error reporting level to E_ALL, which is all error types.
Error messages flagged as notices are runtime problems that are less serious than warnings. They're not necessarily wrong, but they indicate a potential problem. One example of an E_NOTICE is "Undefined variable," which occurs if you try to use a variable without previously assigning it a value:
// Generates an E_NOTICE foreach ($array as $value) { $html .= $value; } // Doesn't generate any error message $html = ''; foreach ($array as $value) { $html .= $value; }
In the first case, the first time though the foreach, $html is undefined. So, when you append to it, PHP lets you know you're appending to an undefined variable. In the second case, the empty string is assigned to $html above the loop to avoid the E_NOTICE. The previous two code snippets generate identical code because the default value of a variable is the empty string. The E_NOTICE can be helpful because, for example, you may have misspelled a variable name:
foreach ($array as $value) { $hmtl .= $value; // oops! that should be $html } $html = '' foreach ($array as $value) { $hmtl .= $value; // oops! that should be $html }
A custom error-handling function can parse errors based on their type and take an appropriate action. A complete list of error types is shown in Table 8-2.
Value |
Constant |
Description |
Catchable |
---|---|---|---|
1 |
E_ERROR |
Nonrecoverable error |
No |
2 |
E_WARNING |
Recoverable error |
Yes |
4 |
E_PARSE |
Parser error |
No |
8 |
E_NOTICE |
Possible error |
Yes |
16 |
E_CORE_ERROR |
Like E_ERROR but generated by the PHP core |
No |
32 |
E_CORE_WARNING |
Like E_WARNING but generated by the PHP core |
No |
64 |
E_COMPILE_ERROR |
Like E_ERROR but generated by the Zend Engine |
No |
128 |
E_COMPILE_WARNING |
Like E_WARNING but generated by the Zend Engine |
No |
256 |
E_USER_ERROR |
Like E_ERROR but triggered by calling trigger_error( ) |
Yes |
512 |
E_USER_WARNING |
Like E_WARNING but triggered by calling trigger_error( ) |
Yes |
1024 |
E_USER_NOTICE |
Like E_NOTICE but triggered by calling trigger_error( ) |
Yes |
2047 |
E_ALL |
Everything |
n/a |
Errors labeled catchable can be processed by the function registered using set_error_handler( ) . The others indicate such a serious problem that they're not safe to be handled by users, and PHP must take care of them.
Recipe 8.17 shows how to set up a custom error handler; documentation on error_reporting( ) at http://www.php.net/error-reporting and set_error_handler( ) at http://www.php.net/set-error-handler; for more information about errors, see http://www.php.net/manual/en/ref.errorfunc.php.
Copyright © 2003 O'Reilly & Associates. All rights reserved.