一个很有用的函数, set_error_handler() 顾名思义,自定义错误的处理。很有用的函数:
- 可以用来屏蔽错误。 出现错误一来会把一些信息暴漏给用户,极有可能成为黑客攻击你网站的工具。 二来让用户觉得你的水平很挫。
- 可以记下错误的信息, 及时发现一些生产环境的出现的问题。
- 可以做相应的处理, 出错的时候可以显示跳转到预先定义好的出错页面,提供更好的用户体验。
- 可以作为调试工具, 一些时候必须在生产环境调试一些东西, 但又不想影响正在使用的用户。
- 。。。。
废话不多说, 上代码:
01 | <?php |
02 | //屏蔽程序中的错误 |
03 | error_reporting (0); |
04 |
05 | //定义Error_Handler 函数 |
06 | /** |
07 | * 定义Error_Handler 函数 |
08 | * |
09 | * @param $error_level 错误级别 |
10 | * @param $error_message 错误信息 |
11 | * @param $file 错误所在文件 |
12 | * @param $line 错误所在行数 |
13 | * |
14 | */ |
15 | function error_handler ( $error_level , $error_message , $file , $line ) { |
16 |
17 | $EXIT = FALSE; |
18 |
19 | switch ( $error_level ) { |
20 | //提醒级别 |
21 | case E_NOTICE: |
22 | case E_USER_NOTICE: |
23 | $error_type = 'Notice' ; |
24 | break ; |
25 | |
26 | //警告级别 |
27 | case E_WARNING: |
28 | case E_USER_WARNING: |
29 | $error_type = 'Warning' ; |
30 | break ; |
31 | |
32 | //错误级别 |
33 | case E_ERROR: |
34 | case E_USER_ERROR: |
35 | $error_type = 'Fatal Error' ; |
36 | $EXIT = TRUE; |
37 | break ; |
38 | |
39 | //其他未知错误 |
40 | default : |
41 | $error_type = 'Unknown' ; |
42 | $EXIT = TRUE; |
43 | break ; |
44 | } |
45 | //直接打印错误信息, 也可以写文件, 写数据库, 反正错误信息都在这, 任你发落 |
46 | printf ( "<font color='#ff0000'><b>%s</b></font>: %s in <b>%s</b> on line <b>%d</b><br /><br />\n" , $error_type , $error_message , $file , $line ); |
47 | |
48 | //错误影响到程序的正常执行的话跳转到友好的错误提示页面 |
49 | if (TRUE == $EXIT ) { |
50 | echo "<script language='Javascript'>location='err.html'; </script>" ; |
51 | } |
52 | |
53 | } |
54 | //这个才是关键点, 把错误的处理交给 error_handler() |
55 | set_error_handler ( 'error_handler' ); |
56 |
57 | #使用未定义的变量要报 notice 的 |
58 | echo $novar ; |
59 | #除以0要报警告的 |
60 | echo 3/0; |
61 | #自定义一个错误 |
62 | trigger_error ( 'Trigger a fatal error' , E_USER_ERROR); |