PHP Error
In PHP, the default error handling is simple. An error message is sent to the browser with the file name, line number, and a message describing the error.
PHP Error Handling
Error handling is an important part when creating scripts and web applications. If your code lacks error detection coding, the program will look unprofessional and open the door to security risks.
This tutorial introduces some of the most important error detection methods in PHP.
We will explain different error handling methods for you:
Simple "die()" statement
Since Define errors and error triggers
Error reporting
Basic error handling: use the die() function
The first example shows a simple script that opens a text file:
<?php $file=fopen("welcome.txt","r"); ?>If the file does not exist, you will get an error like this:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/php/test/test.php on line 2To avoid users getting error messages like the one above, we check if the file exists before accessing it:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>Now, if the file does not exist, you will get an error message like this :
Compared with the previous code, the above code is more efficient because it uses a simple error handling mechanism. The script was terminated after the error.
However, simply terminating the script is not always the appropriate approach. Let's examine alternative PHP functions for handling errors.
Create a custom error handler
Creating a custom error handler is very simple. We simply created a dedicated function that can be called when an error occurs in PHP.
The function must be able to handle at least two parameters (error level and error message), but can accept up to five parameters (optional: file, line-number and error context):
Syntax
error_function(error_level,error_message, error_file,error_line,error_context)
Parameters | Description |
---|---|
error_level | Required. Specifies the error reporting level for user-defined errors. Must be a number. See the table below: Error reporting levels. |
error_message | Required. Specifies error messages for user-defined errors. |
error_file | Optional. Specifies the file name where the error occurred. |
error_line | Optional. Specifies the line number where the error occurred. |
error_context | Optional. Specifies an array containing each variable in use when the error occurred and their values. |
Error reporting levels
These error reporting levels are the different types of errors handled by user-defined error handlers:
Value | Constant | Description |
---|---|---|
2 | E_WARNING | Non-fatal run-time error. Do not pause script execution. |
8 | E_NOTICE | run-time notification. Occurs when the script finds a possible error, but can also occur when the script is running normally. |
256 | E_USER_ERROR | Fatal user-generated error. This is similar to E_ERROR set by the programmer using the PHP function trigger_error(). |
512 | E_USER_WARNING | Non-fatal user-generated warning. This is similar to the E_WARNING set by the programmer using the PHP function trigger_error(). |
1024 | E_USER_NOTICE | User-generated notification. This is similar to E_NOTICE set by the programmer using the PHP function trigger_error(). |
4096 | E_RECOVERABLE_ERROR | Catchable fatal error. Like E_ERROR, but can be caught by a user-defined handler. (See set_error_handler()) |
8191 | E_ALL | All errors and warnings. (In PHP 5.4, E_STRICT becomes part of E_ALL) |
Now, let’s create a function that handles errors:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }The above code is a simple error handling function. When it is triggered, it gets the error level and error message. It then prints the error level and message, and terminates the script.
Now that we have created an error handling function, we need to determine when to trigger the function.
Set the error handler
PHP’s default error handler is the built-in error handler. We are going to transform the above function into the default error handler when the script is running.
You can modify the error handler so that it only applies to certain errors, so that the script can handle different errors in different ways. However, in this case, we intend to use our custom error handler for all errors:
set_error_handler("customError");
Since we want our custom function to handle all errors, set_error_handler() requires only one argument, A second parameter can be added to specify the error level.
Example
Test this error handler by trying to output a variable that does not exist:
<?php// 错误处理函数function customError($errno, $errstr){echo "<b>Error:</b> [$errno] $errstr";}// 设置错误处理函数set_error_handler("customError");// 触发错误echo($test);?> 以上代码的输出如下所示: Error: [8] Undefined variable: test
Trigger Error
At the point in the script where the user enters data, it is useful to trigger an error when the user's input is invalid. In PHP, this task is accomplished by the trigger_error() function.
Example
In this example, if the "test" variable is greater than "1", an error will occur:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>The output of the above code is as follows :
Notice: 变量值必须小于等于 1 in /www/test/php.php on line 5You can trigger an error anywhere in the script. By adding a second parameter, you can specify the error level that is triggered.
Possible error types:
E_USER_ERROR - Fatal user-generated run-time error. The error cannot be recovered. Script execution was interrupted.
E_USER_WARNING - Non-fatal user-generated run-time warning. Script execution is not interrupted.
E_USER_NOTICE - Default. User-generated run-time notifications. Occurs when the script finds a possible error, but can also occur when the script is running normally.
Example
In this example, if the "test" variable is greater than "1", the E_USER_WARNING error occurs. If E_USER_WARNING occurs, we will use our custom error handler and end the script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>The output of the above code will look like this:
Error: [512] 变量值必须小于等于 1 脚本结束Now that we've learned how to create our own errors and how to trigger them, let's look at error logging.
Error logging
By default, PHP sends error records to the server's logging system or file according to the error_log configuration in php.ini. By using the error_log() function, you can send error records to a specified file or remote destination.
Emailing yourself an error message is a good way to get notified of a specified error.
Send error message via E-Mail
In the following example, if a specific error occurs, we will send an email with an error message and end the script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>The output of the above code is as follows:
Error: [512] 变量值必须小于等于 1已通知网站管理员 接收自以上代码的邮件如下所示: Error: [512] 变量值必须小于等于 1This method is not suitable for all errors. General errors should be logged on the server using the default PHP logging system.