PHP错误提⽰的关闭⽅法详解
关闭错误脚本提⽰是程序上线了必须做的⼀件事情,就是不管程序怎么报错我们都不能让错误⽇志在服务器上给⼤家看到,下⾯我来总结两种关闭PHP错误脚本提⽰的具体⽅法:
phperror_reporting()
最简单的办法就是直接在php程序代码中加⼊下⾯代码:
代码如下:
error_reporting(E_ALL^E_NOTICE^E_WARNING);
可以关闭所有notice 和 warning 级别的错误。
把这个语句放在您脚本的功⽤包含⽂件中,通常为config.php 或者⼊⼝⽂件index.php 中就可以控制输出了。
当然也可以在php.ini中进⾏设置了⽅法如下
打开PHP安装⽬录下的php.ini⽂件
到display_errors = On 修改为 display_errors = off
注意:如果你已经把PHP.ini⽂件复制到windows⽬录下,那么必须同时把c:windows/php.ini⾥的display_errors = On 修改为
display_errors = off
PHP .ini中display_errors = Off失效的解决
问题:
PHP 设置⽂件php .ini中明明已经设置display_errors = Off,但是在运⾏过程中,⽹页上还是会出现错误信息。
解决:
打开PHP安装⽬录下的php.ini⽂件
到log_errors = off 修改为 log_errors = on
到error_log = filename 修改为 error_log="D:PHPerrlogphp_error.log" (这⾥的⽬录和⽂件名D:PHPe
rrlogphp_error.log随便你取什么)
注意:如果你已经把PHP.ini⽂件复制到windows⽬录下,那么必须同时把c:windows/php.ini⽂件.
此外php_error.log⾄少要有USER的修改和写权限,否则⽆法输出错误.
经常见到error_reporting(7)直意为:设定错误讯息回报的等级。
value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
然⽽7=1+2+4
就是出错时显⽰1 E_ERROR 2 E_WARNING 4 E_PARSE
代码如下:
1<?php
2//禁⽤错误报告
3error_reporting(0);
4//报告运⾏时错误
5error_reporting(E_ERROR | E_WARNING | E_PARSE);
6//报告所有错误
7error_reporting(E_ALL);
8?>
下边是搜索到的⼀些资料:
error_reporting() 设置 PHP 的报错级别并返回当前级别。
语法
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下⾯⼏项是 level 可能的值:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
E_NOTICE 表⽰⼀般情形不记录,只有程式有错误情形时才⽤到,例如企图存取⼀个不存在的变数,或是呼叫 stat() 函式
检视不存在的档案。
E_WARNING 通常都会显⽰出来,但不会中断程式的执⾏。这对除错很有效。例如:⽤有问题的常规表⽰法呼叫 ereg()。
E_ERROR 通常会显⽰出来,亦会中断程式执⾏。意即⽤这个遮罩⽆法追查到记忆体配置或其它的错误。
E_PARSE 从语法中剖析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核⼼造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核⼼错误警告。
PHP 的错误报告
php.ini ⽂件中有许多配置设置。您应当已经设置好⾃⼰的 php.ini ⽂件并把它放在合适的⽬录中,就像在 Linux 上安装 PHP 和 Apache 2 的⽂档说明中所⽰的那样。在调试 PHP 应⽤程序时,应当知道两个配置变量。下⾯是这两个变量及其默认值:
display_errors = Off
error_reporting = E_ALL
通过在 php.ini ⽂件中搜索它们,可以发现这两个变量当前的默认值。display_errors 变量的⽬的很明显 —— 它告诉PHP 是否显⽰错误。默认值是 Off。但是,要让开发过程更加轻松,请把这个值设为 On:
display_errors = On
error_reporting 变量的默认值是 E_ALL。这个设置会显⽰从不良编码实践到⽆害提⽰到出错的所有信息。E_ALL 对于开发过程来说有点太细,因为它在屏幕上为⼀些⼩事(例如变量未初始化)也显⽰
提⽰,会搞糟浏览器的输出。我只想看到错误和不良编码实践,但是不想看到⽆害的提⽰。所以,请⽤以下值代替 error_reporting 的默认值:
error_reporting = E_ALL & ~E_NOTICE
重新启动 Apache,就全部设置好了。接下来,将学习如何在 Apache 上做同样的事。
服务器上的错误报告
依赖于 Apache 正在做的⼯作,在 PHP 中打开错误报告可能没法⼯作,因为在计算机上可能有多个 PHP 版本。有时很难区分 Apache 正在使⽤哪个 PHP 版本,因为 Apache 只能查看⼀个 php.ini ⽂件。不知道 Apache 正在使⽤哪个php.ini ⽂件配置⾃⼰是⼀个安全问题。但是,有⼀种⽅法可以在 Apache 中配置 PHP 变量,从⽽保证设置了正确的出错级别。
⽽且,最好知道如何在服务器端设置这些配置变量,以否决或抢占 php.ini ⽂件,从⽽提供更⾼级别的安全性。
在配置 Apache 时,应该已经接触过 /f 中 f ⽂件中的基本配置。
要做在php.ini⽂件中已经做过的事,请把下列各⾏添加到 f,覆盖任何 php.ini ⽂件:
php_flag display_errors on
php_value error_reporting 2039
这会覆盖在 php.ini ⽂件中为 display_errors 已经设置的标志,以及 error_reporting 的值。值 2039 代表 E_ALL & ~E_NOTICE。如果愿意采⽤ E_ALL,请把值设为 2047。同样,还是要重启 Apache。
接下来,要在服务器上测试错误报告。
关于error_reporting()这个函数,它是可以屏蔽到⼀些错误信息,但是PHP 核⼼造成的错误,是⽆法屏蔽的,因为PHP 核⼼造成的错误会直接导致PHP⽂件编译失败,因为书写格式没有按照PHP的编码规则写⽽造成的错误,是⽆法屏蔽的
代码如下:
1* For now, avoid warnings of E_STRICT mode
2* (this must be done before function definitions)
3*/
4if (defined('E_STRICT')) {
5$old_error_reporting = error_reporting(0);
6if ($old_error_reporting & E_STRICT) {
7error_reporting($old_error_reporting ^ E_STRICT);
8} else {
9error_reporting($old_error_reporting);
parse error怎么解决10}
11unset($old_error_reporting);
常见的如下:
代码如下:
1// Turn off all error reporting;关闭所有的错误
2error_reporting(0);
3
4// Report simple running errors;报告⼀个简单的运⾏错误
5error_reporting(E_ERROR | E_WARNING | E_PARSE);
6
7// Reporting E_NOTICE can be good too (to report uninitialized
8// variables or catch variable name misspellings …);包括报告⼀些未初始化的变量或捕捉变量名的拼写错误9error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
10
11// Report all errors except E_NOTICE
12// This is the default value set in php.ini;报告所有的错误但不包括E_NOTICE 这也是php.ini的缺省设置
13error_reporting(E_ALL ^ E_NOTICE);
14
15// Report all PHP errors (bitwise 63 may be used in PHP 3);报告所有的错误
16error_reporting(E_ALL);
17
18// Same as error_reporting(E_ALL);同上
19ini_set('error_reporting', E_ALL);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论