Error Handling and Exception
The default error handling in PHP is very simple.An error message with filename, line number and a message describing the error is sent to the browser.
PHP has different error handling methods:
- Simple "die()" statements
- Custom errors and error triggers
- Error reporting
Using the die() function
<?php
if(!file_exists(""a.txt)){
die("File not found");
}else{
$file = fopen("a.txt", "r");
}
?>
Creating a Custom Error Handler
Creating a custom error handler is quite simple.We simply create a special function that can be called when an error occurs in PHP.
The function must be able to handle a minimun of 2 parameters(error level and message) but can accept up to 5 parameters(optionally: file, line-number, and the error context)
error_function(error_level, error_message, error_file, error_line, error_context);
error_level: required.Specifies the error report level for the user-defined error.Must be a value number.
error_message: required.Specifies the error message for the user-defined error.
error_file: optional.Specifies the filename in which the error occurred.
error_line: optional.Specifies the line number in which the error occurred.
error_context: optional.Specifies an array containing every variable, and their values, in use the error occurred
error_levels:
2 E_WARNING Nonn-fatal run-time errors.Execution of the script is not halted
8 E_NOTICE Run-time notices.The script found something that might be an error, but could also happen when running a script normally
256 E_USER_ERROR Fatal user-generated error.This is like an E_ERROR set by the programmer using the PHP function trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning.This is like an E_WARNING set by the programmer using the PHP function trigger_error()
1024 E_USER_NOTICE User-generated notice.This is like an E_NOTICE set by the programmer using the PHP function trigger_error()
4096 E_RECOVERABLE_ERROR Catchable fatal error.This is like an E_ERROR but can be caught by a user define handle
8191 E_ALL All the errors and warnings
<?php
function customError($errno, $errstr){
echo "<b>Error:</b>[$errno] $errstr<br>";
echo "Ending script";
die();
}
?>
The default error handler for PHP is the built in error handler.We are going to make the function above the default error handler for the duration of the script.
set_error_handler("customError");
<?php
function customError($errno, $errStr){
echo "<b>Error:</b>[$errno] $errstr<br>";
}
set_error_handler("cutomError");
echo($test); //Error: [8] Undefined variable: test
?>
In a script where users can input data it is useful to trigger errors when an illegal input occurs.In PHP, this is done by the trigger_error() function.
<?php
$test = 2;
if($test > 1){
trigger_error("Value must be 1 or below");// Notice: Value must be 1 or below
}
?>
An error type can be triggered anywhere you wish in a script, and by adding a second parameter, you can specify what error level is triggered.
Possible error types:
- E_USER_ERROR Fatal user-generated run-time error.Errors that can not be recovered from.Execution of the script is halted
- E_USER_WARNING Non-fatal user-generated run-time warning.Execution of the script is not halted
- E_USER_NOTICE Default.User-generated run-time notice.The script found something that might be an error, but could also happen when running a script normally
Error Logging
By default, PHP sends an error log to the server's logging system or a file, depending on how the error_log configuration is set in the php.ini file.By using the error_log() function you can send error logs to a specified or a remote destination.
<?php
//error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr</br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr", 1, "xx@xxx.com", "From: webmaster@xx.com");
}
set_error_handler("customError", E_USER_WARNING);
$test = 2;
if($test > 1){
trigger_error("Value must be 1 or below", E_USER_WARNING);
}
?>
Exceptions are used to change the normal flow of a script if a specified error occurs.
PHP has different error handling methods:
- Basic use of Exception
- Creating a custom exception handler
- Multiple exceptions
- Re-throwing an exception
- Setting a top level exception handler
Basic Use of Exceptions
<?php
function checkNum($number){
if($number > 1){
throw new Exception("Value must be 1 or below");
}
return true;
}
checkNum(2);
?>
Try, throw and catch
Proper exception code shoule include:
Try--A fucntion using an exception should be in a "try" block.If the exception does not trigger, the code will continue as normal.However if the exception triggers, an exception is "thrown"
Throw--This is how you trigger an exception.Each "throw" must have at least one "catch"
Catch--A "catch" block retrieves an exception and creates an object containing the exception information
<?php
function checkNum($number){
if($number > 1){
throw new Exception("Value must be 1 or below");
}
return true;
}
try{
checkNum(2);
echo 'If you see this, the number is 1 or below';
}
catch(Exception $e){
echo 'Message: ' .$e->getMessage();
}
?>
Creating a Custom Exception Class
To create a custom exception handler you must create a special class with functions that can be called when an exception occurs in PHP.The class must be an extension of the exception class.
The custom exception class inherits the properties from PHP's exception class and you can ad customm functions to it.
<?php
class customException extends Exception{
public function errorMessage(){
$errorMsg = 'Error on line ' .$this->getLine().' in ' .$this->getFile(). ':<b>' .$this->getMessage(). '</b> is not a valid E-Mail address' ;
return $errorMsg;
}
}
$email = "xx@xx.....com";
try{
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
throw new customException($email);
}
}
catch(customException $e){
echo $e->errorMessage();
}
?>
<?php
class customException extends Exception{
public function errorMessage(){
$errorMsg = 'Error on line ' .$this->getLine(). ' in ' .$this->getFile() . ': <b>' .$this->getMessage().'</b> is not a valid Email address'.
return $errorMsg;
}
}
$email = "xxx@xx.com";
try{
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
throw new customException($email);
}
if(strpos($email, "example") !== false){
throw new Exception("$email is an example e-mail");
}
}
catch(customException $e){
echo $e -> errorMessage();
}
catch(Exception $e){
echo $e ->getMessage();
}
?>
<?php
class customException extends Exception{
public function errorMessage{
$errorMsg =$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "xx@xx.com";
try{
try{
if(strpos($email, "example") !== false)
throw new Exception($email);
}
}
catch(Exception $e){
throw new customException($email);
}
}
catche(customException $e){
echo $e->errorMessage();
}
?>
<?php
function myException($exception){
echo "<b>Exception:</b>" .$exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occured');
?>
Rules for exceptions
- Code may be surrounded in a try block, to help catch potential exceptions
- Each try block or "throw" must have at least one corresponding catch block
- Multiple catch blocks can be used to catch different classed of exceptions
- Exceptions can be thrown in a catch block within a try block
Error Handling and Exception的更多相关文章
- TIJ——Chapter Twelve:Error Handling with Exception
Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...
- setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
目录 . 应用场景 . Use Case Code Analysis . 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer Over ...
- Error Handling
Use Exceptions Rather Than Return Codes Back in the distant past there were many languages that didn ...
- Clean Code–Chapter 7 Error Handling
Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...
- beam 的异常处理 Error Handling Elements in Apache Beam Pipelines
Error Handling Elements in Apache Beam Pipelines Vallery LanceyFollow Mar 15 I have noticed a defici ...
- Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally
继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Fina ...
- Error handling in Swift does not involve stack unwinding. What does it mean?
Stack unwinding is just the process of navigating up the stack looking for the handler. Wikipedia su ...
- WCF Error Handling
https://docs.microsoft.com/en-us/dotnet/framework/wcf/wcf-error-handling The errors encountered by a ...
- ASP.NET Error Handling
https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspn ...
随机推荐
- (12)odoo各种提前期和时间
1)Product的提前期 Customer Lead Time(sale_delay):客户提前期,指SO确认到向客户发货的天数,由于销售数量不同该时间也不同,因此,这里是一个平均时间. ...
- LDM和STM指令
LDM批量加载/STM批量存储指令可以实现一组寄存器和一块连续的内存单元之间传输数据. 允许一条指令传送16个寄存器的任意子集和所有寄存器,指令格式如下: LDM{cond} mode Rn{!} ...
- css3 keyframes animation
html,body,div,span,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,address,big,cite,code,del,em,font,img ...
- Jquery操作select小结
每次操作select都要查资料,干脆总结一下. 为select设置placeholder <select class="form-control selOP" placeho ...
- juery 选择器 选择多个元素
使用,号: $("#goodSource,#mailState") 选择了id为goodSource或者mailState的元素,当两者之间有任何一个有改变时,将会触发该操作. / ...
- Qt 制作安装包
Qt 制作在线.离线 安装包 见如下文档
- bzoj 2661: [BeiJing wc2012]连连看
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
- ASP.NET MVC 基于角色的权限控制系统的示例教程
上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...
- php解密java的DES加密
echo openssl_decrypt( $密文 ,"des-ecb" , $密钥 );
- ubuntu 防火墙 添加策略 解决mysql远程访问问题
ubuntu 的iptables 文件不在 init.d中 不能 service iptables restart 只修改 /etc/iptables 文件也不管用 sudo iptables -L ...