文档详情

php错误处理机制.docx

发布:2017-03-30约5.07千字共7页下载文档
文本预览下载声明
在编写php程序时,错误处理是一个重要的部分。如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门.例:?php?$a = fopen(test.txt,r);//这里并没有对文件进行判断就打开了,如果文件不存在就会报错?那么正确的写法应该如下:?php? ? if(file_exists(test.txt)){? ? ? ? $f=fopen(test.txt,r);//使用完后关闭? ? ? ? fclose($f);}??一、PHP错误处理的三种方式A、简单的die()语句;等价于exit();例:if(!file_exists(aa.txt)){die(文件不存在);} else {//执行操作}? ? //如果上面die()被触发,那么这里echo接不被执行?? ? 简洁写法:? ? file_exits(aaa.txt) or die(文件不存在);? ? echo ok;B、自定义错误和错误触发器1、错误处理器(自定义错误,一般用于语法错误处理)? ? ? ? 创建自定义错误函数(处理器),该函数必须有能力处理至少两个参数(error_level和errormessage),但是可以接受最多五个参数(error_file、error_line、error_context)语法:Function error_function($error_level,$error_message,$error_file,$error_line,$error_context)//创建好后还需要改写set_error_handler();函数? ? ? ??set_error_handler(error_function,E_WARNING);//这里error_function对应上面创建的自定义处理器名,第二个参数为使用自定义错误处理器的错误级别;错误报告级别(了解即可)这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:值常量描述2E_WARNING非致命的 run-time 错误。不暂停脚本执行。8E_NOTICERun-time 通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。256E_USER_ERROR致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。512E_USER_WARNING非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。1024E_USER_NOTICE用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。4096E_RECOVERABLE_ERROR可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())8191E_ALL所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)2、错误触发器(一般用于处理逻辑上的错误)需求:比如要接收一个年龄,如果数字大于120,就认为是一个错误传统方法:if($age120){echo 年龄错误;exit();}使用触发器:if($age120){? ? ? ? ? ? ? ? //trigger_error(错误信息[,错误等级]);这里错误等级为可选项,用于定义该错误的级别? ? ? ? ? ? ? ? //用户定义的级别包含以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE? ? ? ? ? ? ? ??trigger_error(年龄错误);//这里是调用的系统默认的错误处理方式,我们也可以用自定义处理器? ? ? ? ? ? }? ? ? ? ? ? //自定义处理器,与上面相同? ? ? ? ? ? functionmyerror($error_level,$error_message){? ? ? ? ? ? ? ? echo error text;? ? ? ? ? ? }? ? ? ? ? ? //同时需要改变系统默认的处理函数? ? ? ? ? ? set_error_handler(myerror,E_USER_WARNING);//同上面,第一个参数为自定义函数的名称,第二个为错误级别【这里的错误级别通常为以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE】? ? ? ? ? ? //现在再使用trigger_error就可以使用自定义的错误处理函数了?练习题: 1 ?php 2date_default_timezone
显示全部
相似文档