如何在PHP中使用设置错误处理程序函数

  介绍

这期内容当中小编将会给大家带来有关如何在PHP中使用设置错误处理程序函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

set_error_handler()函数设置用户自定义的错误处理函数。该函数用于创建运行时期间的用户自己的错误处理方法。该函数会返回旧的错误处理程序,若失败,则返回零。

<强>下面来看一些例子。

, set_error_handler ()

PHP从4.1.0开始提供了自定义错误处理句柄的功能函数set_error_handler(),但很少数脚本编写者知道.set_error_handler这个函数可以很好地防止错误路径泄露,当然还有其它更多的作用。

1。可以用来屏蔽错误。出现错误一来会把一些信息暴漏给用户,极有可能成为黑客攻击你网站的工具。二来让用户觉得你的水平很挫。

2。可以记下错误的信息,及时发现一些生产环境的出现的问题。

3。可以做相应的处理,出错的时候可以显示跳转到预先定义好的出错页面,提供更好的用户体验。

4。可以作为调试工具,一些时候必须在生产环境调试一些东西,但又不想影响正在使用的用户。

5 .....

<强>,set_error_handler的使用方法如下:

代码如下:


视图sourceprint ?1弦set_error_handler(回调error_handler [int error_types])

我们利用error_reporting();看到的错误信息包括三个部分,错误信息,错误文件的绝对地址,错误出现的行数,其实还有一个是错误类型.Array([型]=比;1[信息]=比;调用未定义方法SomeClass: somemedthod()[文件]=比;/home/zhangy/www/aaaa/stasdf.php(线)=比;67年),页面的绝对路径最好不要暴露给别人,不然给有些人可称之机,为了杜绝这一点,好多人都会采用,报错(“display_errors",0);直接把错误信息给屏蔽掉了。这样就不方便的了,如果我们要看信息怎么办呢?每次查看的时候,是不是都要改一下代码,或者是改一下apache的配置,在重起一下呢?

<强> php有函数set_error_handler可以解决这个问题

用法如下:

混合set_error_handler(回调error_handler美元[int error_types美元=E_ALL |代码])

<强> php函数register_shutdown_function也可以解决这个问题

用法如下:

int register_shutdown_function(字符串函数美元)

个人觉得报错函数自己定义,至少有三点好处,

1,不会把文件的绝对路径显示出来,安全些

2,即使真的出现了错误信息,我们可以对错误信息进行处理,让用户也看不到致命错误这样的东西。用户体验要好

3项目上线后,有的时候,你还是要帮用户去解决问题,这个时候难免要去修改代码,但是我们又要让错误信息报出来,又不能让用户看的到,这个时候,用set_error_handler这样的函数就很爽了。

个人做了一个小测试

& lt; php ?   ,error_reporting (0);   register_shutdown_function (& # 39; error_alert& # 39;);   ,function  error_alert ()   ,{   ,如果(is_null ($ e =, error_get_last()),===,假)   ,{   ,set_error_handler (& # 39; errorhandler # 39;);   ,如果($ e[& # 39;类型# 39;],==,1){   ,trigger_error (“fatal  error",, E_USER_ERROR);   ,}elseif ($ e[& # 39;类型# 39;],==,8){   ,trigger_error (“notice", E_USER_NOTICE);   ,}elseif ($ e[& # 39;类型# 39;],==,2){   ,trigger_error (“warning", E_USER_WARNING);   ,其他}{   ,trigger_error (“other", E_USER_OTHER);   ,}   ,其他}{   ,echo “no  error";   ,}   ,}   ,set_error_handler (& # 39; errorhandler # 39;);   function  errorHandler ($ errno, errstr美元,errfile美元,errline美元,美元errcontext)   ,{   ,switch  (errno美元),{   ,case  E_USER_ERROR:   ,echo “& lt; b> My  ERROR, [errno美元],errstr<美元;br /祝辞n";   ,echo “Fatal  error 提醒line  errline 美元;拷贝file  errfile"美元;;   ,echo “PHP “,只PHP_VERSION 只“,(“,只PHP_OS 只“)& lt; br /祝辞n";   ,打破;   ,case  E_USER_WARNING:   ,echo “& lt; b> My  WARNING, [errno美元],errstr<美元;br /祝辞n";   ,echo “warning 提醒line  errline 美元;拷贝file  errfile"美元;;   ,echo “PHP “,只PHP_VERSION 只“,(“,只PHP_OS 只“)& lt; br /祝辞n";   ,打破;   ,case  E_USER_NOTICE:   ,echo “& lt; b> My  NOTICE

如何在PHP中使用设置错误处理程序函数