php错误处理

在php.ini里吧display_errors=On开启

 

语法错误,比如没有加分号

echo 1;

echo 2

连1都没有出来,这就是语法错误,语法分析当中,会把类啊,函数啊加到内存当中

 

echo 1;

require 'houdunren';

运行时错误,会执行1,但是require会报错

 

 

逻辑错误,如果写成了--,那么会造成死循环,属于业务逻辑错误,需要程序员自己解决

for($i = 0 ;$i <5; $i++){

echo $i;

}

 

代码上线后需要把错误都关闭掉,在开发期理应开启所有的错误通知

错误级别

关闭警告与致命错误,例如require(a)

error_reporting(~E_WARNING &~E_COMPILE_ERROR);

require('a');

 

显示除通知外的所有错误,通知错误,变量没有定义

error_reporting(E_ALL & ~E_NOTICE);

echo $test;

 

关闭错误提示,所有错误都不显示,在生产环境下的时候,用户看不见,把发生的错误存到日志中,从日志中找这些错误,解决问题,在下一次版本升级的时候修复

error_reporting(0);

 

 

忽略错误

require a;

echo "test";

这个会报错,但是

@require a;

echo "test";

就会把错误忽略掉

 

记录到错误日志里,在下一次的版本迭代中,把错误修正

 

php.ini也可以改

error_reporint = E_ALL

 

用函数当然更灵活了,主要推荐的方式

 

自定义错误处理引擎

namespace Core;

class Error{

protected $debug;

public function __constructor(){

$this->debug = $debug;

}

public function error(){

error_reporting(0);

set_error_handler([$this,'handle'],E_ALL | E_STRICT);//所有错误都要交给错误处理函数处理

}

//发生错误时都会经过该函数

public function handle($code,$error,$file,$line){

echo $file;

$msg = $error."($code)" . $file . "($line)";

switch($code){

case E_NOTICE:

echo $msg;

include 'views/notice.php'

break;

default:

include 'views/error.php';

die;//处理完就停止

break;

}

}

}

<?php

include 'Error.php';

(new Error())->error();

echo $a;

 

 

PHP可以定义不同级别的错误处理等级

 

也可以放到模板中

 

 

发生多条通知性错误的时候,就会显示多条

 

require a;//警告性错误

 

 

使用debug来处理错误

if($this->debug){

echo $msg;

include 'views/notice.php'

}

if($this->debug){

echo $msg;

include 'views/error.php'

}

 

(new Error(false))->error();//错误就不显示,引入了$debug错误是否显示变量

 

 

日志检测错误

使用日志保存错误

logs,在logs文件夹下

default:

if($this->debug){

include 'view/error.php'

}else{

$file = 'logs/'.date("Y_m_d").'.log';

error_log(date('[c]').$msg.PHP_EOL,3,$file);

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值