错误与异常的概念
PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。平时遇到的warming、notice都是错误,只是级别不同而已。
PHP异常:一般是业务逻辑上不合预期、与正常流程不同的状况,不是语法错误。
下面我们来看看PHP中的错误级别:




设置错误级别
一.错误级别可以在php.ini的error_reporting里设置,如果是想显示除了notice以外所有的错误级,则可以设置成:error_reporting=E_ALL&~E_NOTICE。其中,配置项里还有有个display_errors,如果把它设置为off,则页面上即使有错误,也不会显示出来。
二.当然,在我们的实际开发中,一般情况的话我们可以在php的程序中进行设置。例如在程序中输入error_reporting(0);就表示屏蔽所有错误,也就是所有的错误都不会再页面显示出来(不包括解析错误),error_reporting(-1);就表示显示所有错误。如果想显示除了notice以外所有的错误级,也可以在程序中做设置: error_reporting(E_ALL&~E_NOTICE)。
三.我们也可以使用ini_set()来进行运行时设置配置选项的值。例如:ini_set(‘error_reporting’,0)来设置不开启所有的错误(不包括解析错误),ini_set(‘error_reporting’,-1)来设置开启所有的错误级别。如果设置ini_ser(‘display_errors’,0)来设置显示的话,不管错误级别进行了怎样的设置,都不会再页面上显示错误。
PHP配置文件中与错误日志相关的选项将错误日志存到指定文件中

一、我们可以通过在php的配置文件中(php.ini)找到log_errors将其值设为on,进行开启。然后找到error_log,将错误日志指定到某个文件下。例如(E:/PHP/error/error.log)。
二、我们也可以在PHP程序中进行动态开启,代码如下:
ini_set('display_errors','off');//关闭错误显示,不让客户看到错误信息
ini_set('error_log','E:\php39\impover\error.log');
error_reporting(-1);//开启所有的错误级别
echo $test;//输出没有值的数
echo '';
error();//调用未定义的函数
?>
然后在指定的文件夹下会多了一个error.log的文件,点开,出现如下的信息:

三、我们也可以把错误日志也存储到系统中,代码如下:
/**
* 把错误日志存储到系统中
*/
ini_set('display_errors',0);
ini_set('log_errors',1);//开启错误日志
ini_set('error_log','syslog');//把错误日志存储到系统中
error();//调用一个不存在的函数,报错。
?>
运行上面代码之后,我们鼠标右键计算机——》管理——》事件查看器——》信息,找到PHP-5.6.30(如果使用的php版本不是这个,就会显示相应的php版本),查看结果。
下面写一个事例,用在某些人进行各种尝试以能够登录admin
HTML的代码如下:
登录系统
用户名:
密码:
PHP的代码如下:
/**
* 记录错误信息,检查是否有人进行各种尝试进行admin信息的登录
*/
ini_set('diaplay_errors',1);//显示所有的错误信息
error_reporting(-1);//开启所有的错误级别
ini_set('log_errors','on');//开启错误日志
ini_set('error_log','E:\php39\impover\adminLogin.log');//错误日志文件地址
ini_set('ignore_repeated_errors','on');//忽略重复的错误信息
ini_set('ignore_repeated_source','on');//忽略重复错误信息的来源
$username = $_POST['username'];
$password = $_POST['password'];
if($username=='admin'&& $password=='root'){
echo 'ok';
}else{
$date = date('Y-m-d H:i:s',time());
$ip = $_SERVER['REMOTE_ADDR'];//获取ip
$message = "用户{$username}在{$date}以密码{$password}尝试登录系统,IP为{$ip}";
error_log($message);//写入错误信息
header('Location:test.html');
}
?>
尝试2次故意的错误登录之后,错误日志如下:

网友评论