错误与异常的概念
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程序中进行动态开启,代码如下:
?phpini_set(display_errors,off);//关闭错误显示,不让客户看到错误信息ini_set(error_log,E:\php39\impover\error.log);error_reporting(-1);//开启所有的错误级别echo$test;//输出没有值的数echohr/;error();//调用未定义的函数?
然后在指定的文件夹下会多了一个error.log的文件,点开,出现如下的信息:
三、我们也可以把错误日志也存储到系统中,代码如下:
?php/***把错误日志存储到系统中*/ini_set(display_errors,0);ini_set(log_errors,1);//开启错误日志ini_set(error_log,syslog);//把错误日志存储到系统中error();//调用一个不存在的函数,报错。?
运行上面代码之后,我们鼠标右键计算机——》管理——》事件查看器——》信息,找到PHP-5.6.30(如果使用的php版本不是这个,就会显示相应的php版本),查看结果。
下面写一个事例,用在某些人进行各种尝试以能够登录adminHTML的代码如下:
!DOCTYPEhtmlhtmlheadmetacharset=utf-8/headbodyh1登录系统/h1formaction=doAction.phpmethod=post用户名:inputtype=textname=username/br/密码:inputtype=passwordname=password/br/inputtype=submitvalue=提交//form/body/html
PHP的代码如下:
?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){echook;}else{$date=date(Y-m-dH:i:s,time());$ip=$_SERVER[REMOTE_ADDR];//获取ip$message=用户{$username}在{$date}以密码{$password}尝试登录系统,IP为{$ip};error_log($message);//写入错误信息header(Location:test.html);}?
尝试2次故意的错误登录之后,错误日志如下: