主要内容:
- PHP错误类型
- 异常的产生
- 错误日志
- 日志信息记录到操作系统日志
- 异常处理
- 扩展异常处理类
PHP错误类型
- 语法错误
- 执行时错误
- 逻辑错误
异常的产生
如果安装了xampp之后,在php.ini中可以设置错误报告,配置文件路径:C:\xampp\php
可以使用error_reporting(0)关闭错误提示,使用error_reporting(E_ALL)报告所有错误
在ini文件中使用;分号注释
错误日志
使用指定文件记录错误报告日志
在开发的产品投入使用后,通常会把所有的错误提示都关闭,因为这些提示会影响消费者对产品的体验,而且曝露太多信息容易被黑客攻击。
错误信息可以保存到单独的文本(日志文件)中而不要显示在浏览器中。
默认情况都是配置好的,在程序中可以使用error_log($msg)来自定义错误信息
error.php
<?php
echo "ssdsds";
error_log("这是一段自定义的报错日志信息");
?>
打开文件
[06-Aug-2018 07:24:24 Europe/Berlin] 这是一段自定义的报错日志信息
[06-Aug-2018 07:24:50 Europe/Berlin] 这是一段自定义的报错日志信息
打开php.ini配置文件
报告PHP所有错误
设置PHP报错日志地址:
日志信息记录到操作系统日志
常用方法
- openlog($msg,$option,$facility)打开日志连接,比如openlog("php",LOG_PID,LOG_USER)
- syslog($priority,$msg)生成日志消息,比如syslog(LOG_WARNING,"向syslog中发送自定义信息。。。")
- closelog()关闭日志连接
syslog.php
<?php
openlog("PHP5",LOG_PID,LOG_USER);
syslog(LOG_WARNING,"向syslog发送自定义信息");
closelog();
?>
自定的信息都被记录都爱系统日志中了,可以在计算机》管理》事件查看器》windows日志》应用程序》点击警告,即生成的信息。
异常处理
异常处理是一种可扩展、易维护的错误处理统一机制。
异常处理的实现
exception.php
<?php
try{
$error="这是异常的提示信息";
throw new Exception($error);
echo "这里不会被执行";
}catch(Exception $e){
echo "错误信息:".$e->getMessage()."<br/>";;
}
echo "程序继续向下执行";
?>
输出
错误信息:这是异常的提示信息
程序继续向下执行
异常必须手动抛出,关键字是throw,比如 ,throw new Exception();,注意,在异常被处理后,程序会继续向下执行。
扩展异常处理类
Exception类是所有异常的基类,可以通过继承来扩展它。
Exception.php
<?php
//异常类
class Exception{
protected $message='Unknow exception';
protected $code=0;
protected $file;
protected $line;
//构造方法
public function __construct($message=null,$code=0,$previous=null){};
public function __toString();//可重载,用于返回可输出的字符串
final public function getMessage();//返回异常信息
final public function getCode();//返回异常代码
final public function getFile();//返回发生异常的文件名
final public function getLine();//返回发生异常的代码行号
final public function getTrace();//数组形式返回异常传递的线路
final public function getPrevious();//返回格式化异常
final public function getTraceAsString();//返回格式化字符串的getTrace信息
}
?>
现在我们定义自己的异常类
myException.php
<?php
//异常类
class cakeException extends Exception{
public function __toString(){
return "这个蛋糕过期了<br/>";
}
}
//异常类
class pearException extends Exception{
public function __toString(){
return "这个梨子烂了<br/>";
}
}
//异常类
class appleException extends Exception{
public function __toString(){
return "这个苹果坏了<br/>";
}
} try{
throw new cakeException();
}catch(Exception $e){
echo $e;
}
try{
throw new appleException();
}catch(Exception $e){
echo $e;
}
try{
throw new pearException();
}catch(Exception $e){
echo $e;
} ?>
输出
这个蛋糕过期了
这个苹果坏了
这个梨子烂了
上面都是直接抛出异常,在应用中,我们通过判断来抛出异常
demo.php
<?php try{
$a=10;
if(isset($b)){
echo "程序正常执行";
}else{
throw new Exception();
}
}catch(Exception $e){
echo "错误代码所在路径:".$e->getFile()."<br/>";
echo "错误代码所在行号:".$e->getLine()."<br/>";
}
echo "<br/>程序执行完毕<br/>"; ?>
输出
错误代码所在路径:C:\xampp\htdocs\demo.php
错误代码所在行号:8 程序执行完毕
ok,关于异常处理就到这里了。