PHP错误处理-创新互联

PHP错误处理

创新互联建站服务项目包括永春网站建设、永春网站制作、永春网页制作以及永春网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,永春网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到永春省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

错误的分类:

    语法错误:程序没法运行,直接提示语法错误

    运行时错误:只有程序运行到某行,或在某此特定的情形下运行才会发生的错误。

    逻辑错误:程序从头到尾运行都没有发生(并提示)错误,但程序运行计算的结果是错误的。

程序员主要面对的和要处理的错误,就是运行时错误。

错误的分级:

    

    在php中,将各种错误,分门别类,依据不同的严重程序和产生的来源(机制),将各种错误分为大约十几个级别。

    每个级别的错误,都对应一个内部的名称--系统常量!

系统错误:

    E_ERROR 系统严重错误 (一发生,程序立即停止执行。该错误一般希望马上解决)

    E_WARNING 系统警告  (一发生,提示错误,并继续执行。通常该错误希望能够在“下一工作日”去处理掉)

    E_PARSE 语法错误    (一发生,提示错误,而且代码完全不会运行--在运行之前先检查语法。)

    E_NOTICE 系统提示    (一发生,提示错误,并继续执行。发个邮件通知下,自己安排时间有空去解决。)

    它们的本质是什么呢?

echo "
E_ERROR =  ".E_ERROR;

echo "
E_WARNING =  ".E_WARNING;

echo "
E_PARSE =  ".E_PARSE;

echo "
E_NOTICE =  ".E_NOTICE;

输出的结果分别为:

E_ERROR = 1
E_WARNING = 2
E_PARSE = 4
E_NOTICE = 8

可见它们只是一个系统内部的常量(整数常量);实际上,这些常量(代号)是供我们对该类错误进行“控制”的标示符而已。

用户自定义错误:

    只有三个:

    E_USER_ERROR

    E_USER_WARNING

    E_USER_NOTICE

我们可以在程序中,自己创建(生成)错误 -- 是为了针对某些数据的不合理情形而创建的错误

    比如:让用户填写年龄,填18是OK,但填写188,则就是不合理 -- 从数字角度本身是没有问题的

其它错误:

    E_ALL     代表所有错误 -- 表示它可以“包括”所有错误。

    E_STRICT   代表“严格性”语法检查错误 -- 某种语法是可以执行的,但在当前的php版本是不欢迎使用。

错误的触发:

    正常触发:程序运行时确实发生了运行错误 -- 也可能是语法检查错误

    三种常见的运行时错误:

    PHP错误处理人工触发:

    就是由程序员通过程序代码而“产生”一个错误

语法:

    trigger_errer("错误提示",用户错误代号);

PHP错误处理

应用中,通常是需要检测(判断)数据的有效性,以决定是否触发相应错误,比如:

PHP错误处理

错误的显示控制:

    网页中显示(提示)错误信息,是可以进行控制的,有两种途径:

    1:在php.ini文件中设定,对所有php程序都有效

    2:在当前脚本文件中,只对当前脚本文件有效

错误的显示有2个方面可以进行控制:

    1:设定是否显示:display_error

        php.ini中控制:display_error = on; //表示显示,off表示不显示

        脚本中:ini_set("display_error",1); //1表示显示,0表示不显示,也可以用true or false

        脚本中的设定优先级高,但只对当前文件有效。

2:设定显示哪些级别的错误 -- 依赖与第一项设定为显示的情况

    php.ini文件中:

        error_reporting = E_NOTICE; //只显示E_NOTICE错误

        error_reporting = E_NOTICE | E_WARNING //显示E_NOTICE 和 E_WARNING

        error_reporting = E_NOTICE | E_WARNING | E_ERROR //显示E_NOTICE 和 E_WARNING 和 E_ERROR

ini_set()含义可以设定几乎所有php.ini中的设定项,形式如下:

    ini_set("设定项名称",值); //这种设定都只对当前脚本有效,而且无需重启apache,很方便

另一个对应函数是:int_get("设定项名称"); //用于获取某项的值。

记录错误日志:

    在开发阶段,我们通常都是显示所有错误 -- 意图解决错误

    在产品阶段,我们通常都是隐藏所有错误 -- 并同时将错误信息记录到文件中--错误日志文件

    我们可以自己查看错误日志以解决开发阶段没有发现的错误问题

记录错误日志同样有2种途径:

    1:在php.ini文件中设定

        log_errors = on;    //用于设定是否记录错误日志,on or off

        error_log = "错误日志文件名";  如:error_log = php_errors.log

        此时,该文件没有给定路径,则系统会在每个文件夹下建立该文件并记录

        error_log还有一个特殊值可以使用:error_log = syslog; 表示不会记录错误日志文件,而是把错误信息写入到系统错误日志中

    2:在当前脚本文件中

        ini_set("log_errors",On);    //or Off

        ini_set("error_log",'err1.log');

        ini_set("error_log",'err2.txt');

        ini_set("error_log",'err3.html');

        ini_set("error_log",'syslog);    //记录到操作系统日志中

自定义错误处理:

    以上的错误处理,不管是显示错误,还是记录错误日志,都是php语言内部实现的。

    我们只是几个简单的设定是否显示或是否记录或显示哪些,或记录到哪里。

  则:

    自定义错误处理,就可以让我们自己完全控制错误的提示内容!

    做法非常简单:

        1:设定要来运行自定义处理错误的函数名;

        2:自己去定义该函数,并在其中进行任何错误信息的输出

这两件事做好后,一旦发生错误,则系统就会调用该 函数去执行里面的代码

设定错误由我们自定义函数来处理:set_error_handler("函数名");

定义该函数,带4个参数:function errorHandler($errNo,$errMsg,$errFile,$errLine) {......}

PHP错误处理

注意:上述自定义处理函数中,只做了“显示错误”的工作,而没有做“记录错误日志”的工作。这需要后续“操作文件”的知识。

测试代码:

PHP错误处理

则界面显示结果:

PHP错误处理

几点说明:

    1:一般是用自定义错误处理程序,则系统不再处理错误

    2:如果一旦发生严重错误(E_ERROR , E_USER_ERROR),则立即停止程序,并也不去调用自定义错误处理函数 -- 此时系统错误处理工作照常进行 -- 即对于严重错误,自定义函数处理不了。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:PHP错误处理-创新互联
浏览路径:http://hbruida.cn/article/ceeeei.html