标签归档:php

PHP异常处理try catch

下面是一段代码:

 echo "早上起来<br>";
 echo "开车上班<br>";
 echo "路况很好<br>";
 echo "到公司上班<br>";

执行的结果如下:

早上起来
开车上班
路况很好
到公司上班

但是如果路上出现异常,比如车子爆胎了,怎么办?一般情况下我们会换上备胎继续去上班。那么用PHP怎么处理呢?

 echo "早上起来<br>";
 try{
 echo "开车上班<br>";
 throw new Exception("车子爆胎了");
 echo "路况很好"; 
 } catch(Exception $e) {
 echo $e->getMessage()."<br>";//
 echo "换上备胎,继续开车<br>";
 } 
 echo "到公司上班<br>";

这样显示的结果如下:

早上起来
开车上班
车子爆胎了
换上备胎,继续开车
到公司上班

注意:

1、如果没有异常,也就是没有throw那行代码,catch里面的语句是不会执行的。

2、throw是抛出异常,我们抛出的异常是“车子爆胎了”。

3、Excetpion是一个系统的类,throw那句,我们是创建了一个类。

4、$e->getMessage()是显示异常的情况,我们这个异常是“车子爆胎了”,那么就会显示这“车子爆胎了”这一句。

PHP设置错误日志

一段PHP代码,如果里面有错误,就会提示出来,但是如果我们的网站做好之后,用户在访问的时候就会看到错误提示,用户检验不好。如果是黑客看到,可能就会发现我们网站的漏洞,对我们网站进行攻击。

所以我们要把错误日志设置成只有我们能看见。

具体操作如下:

首先在php.ini文件中搜索display_errors,设置成Off。这样设置的作用就是让错误提示不显示出来。

然后在php.ini文件里搜索error_log,找到“error_log = “d:/wamp/logs/php_error.log””类似这样的一句,把这句打开。这样设置的作用就是把PHP的错误日志写在d:/wamp/logs/php_error.log日志里。

这样我们就可以在d:/wamp/logs/php_error.log日志里查看PHP的错误日志了。

自定义PHP的错误报告处理方式

首先,我们要知道为什么要自定义PHP的错误报告方式。
答案就是影响美观、用户体验差。
我们知道,PHP哪条代码有问题,哪里就会报错,报错的样式如下图所示:
PHP错误提示
为了解决“影响美观、用户体验差”的问题,我们就要对错误报告进行自定义处理了。
怎么处理?把错误报告放到网站最下面。
方法如下:
今天我们的示例代码如下:

        getType($a);
	echo "111111111";
	getType();
	echo "2222222222";

自定义错误首先要在PHP里面注册set_error_handler()函数,然后我们在用自己的函数来处理错误,最后我们再声明一个全局变量用来显示错误信息。
具体的代码如下:

	//在PHP中注册一个函数,来处理错误报告而不按原来的方式处理
	set_error_handler("myerrorfun");
	$mess = "";
	//自己的错误报告函数
	function myerrorfun($error_type,$error_message,$error_file,$error_line) {
		global $mess;
		$mess.="发生错误的级别为{$error_type}类型,错误消息为{$error_message},在文件{$error_file}里面的第{$error_line}行";
	}

	getType($a);
	echo "111111111";
	getType();
	echo "2222222222";

	echo "------------------------------";
	echo $mess;

最后显示的错误报告如下:
自定义的PHP错误提示

PHP错误报告及设置级别

在写PHP程序的时候,出现错误很正常,在出错的情况下,PHP会给我们提示,一般的提示有三种:注意、警告、错误。

我们要做的就是依据提示,对我们的程序代码进行修改。

下面是一段PHP程序,里面包含了注意、警告、错误三种提示。

getType($a);//没有定义变量a,会提示Notice
echo "1111111111";
getType();//没有变量,会提示Warning
echo "222222222";
getType3();//没有这个函数,会提示error
echo "333333333";

今天我们要做的就是设置报告错误的级别,比如让PHP只显示“错误”,或者是让PHP只显示“注意”,这个就是个人按照个人的需要进行设置了,但是怎么设置呢?

方法有两种:一种是修改服务器上的php.ini文件,另外一种是在我们的程序代码文件中进行设置。

先说第一种修改php.ini文件

首先要打开php.ini文件,搜索error_reporting,我们会看到默认error_reporting = E_ALL是开启的,意思就是全部错误都报告。

只显示注意:error_reporting = E_NOTICE

只显示警告:error_reporting = E_WARNING

只显示错误:error_reporting = E_ERROR

我们也可以组合着写:例如显示全部除过注意的:error_reporting =E_ALL & ~E_NOTICE,其他的组合大家按照自己需要来写。

第二种就是在自己写的PHP代码中设置

在我们写的代码文件中写入error_reporting()这个函数,例如我们需要只显示注意,我们这样写error_reporting(E_NOTICE);像上面的我们需要显示全部但除过注意的可以这样写error_reporting(E_ALL & ~E_NOTICE)

说白了,第二种方法就是把应该在php.ini文件中修改的东西自己写在代码中,一般应用于没有权限修改php.ini文件的情况。