PHP error handling
PHP Error Handling
In PHP, the default error handling is very 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 treatment methods for you:
· Simple "DIE ()" statement
· Custom error and error trigger
· Error reporting
Basic error handling: using 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/runoob/test/test.php on line 2
In order to avoid users getting error messages similar to the above, we check whether 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:
File does not exist
The above code is more efficient than the previous code, This is due to a simple error handling mechanism that terminates the script after an 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)
Error report Levels
These error reporting levels are the different types of errors handled by user-defined error handlers:
Now, let’s create a Function to handle error:
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 are going to use our custom error handler for all errors:
set_error_handler("customError");
Since we want our custom function to To handle all errors, set_error_handler() requires only one parameter, and 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); ?>
The output of the above code looks like this:
Error : [8] Undefined variable: test
Trigger Error
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("Variable value must be less than or equal to 1");
}
?>
The output of the above code is as follows:
Notice: The variable value must be less than or equal to 1
in /www/test/runoob. php on line 5
You can trigger an error anywhere in the script. By adding the 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] Variable value must be less than or equal to 1
End of script
Now that we have learned how to create our own errors and how to trigger them, let's study error logging.
Error record
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] The variable value must be less than or equal to 1
The website administrator has been notified
Received from the above code The email is as follows:
Error: [512] The variable value must be less than or equal to 1
This method is not suitable for all errors. General errors should be logged on the server using the default PHP logging system.