PHP错误报告设置不生效?

时间:2022-09-29 21:36:53
遇到这样的问题,自己机子上装的(MAX OS,PHP5.4.24),配置文件里是打开了错误报告 的( display_errors = On;和error_reporting = E_ALL & ~E_NOTICES),但我现在程序里想关闭错误报告,
    ini_set('display_errors', 0);
    error_reporting(0);

为什么不生效呢?就算上面这两函数用上了,出了致命错误后,一直是报的。难道没办法屏蔽吗?一定要修改配置文件 为OFF?
于是我看了一下手册。还真有一句话:
Note:
尽管 display_errors 也可以在运行时设置 (使用 ini_set()), 但是脚本出现致命错误时任何运行时的设置都是无效的。 因为在这种情况下预期运行的操作不会被执行。

上面这话怎么解理?意思是只是你程序出致命错误了,任何ini_set都是无效的? 那么错误报告是否显示,全完看ini配置。所以想临时修改报告 是不可能的?只能通过修改配置然后重启服务。。。。


求大神讲解。。


8 个解决方案

#1


如果你的错误出现在 ini_set('display_errors', 0); 之前
那么错误信息是一定要输出的
而致命错误多为语法错误,必然会出现在运行之前

你可以将错误信息定向到日志文件
也可以对开发环境和运行环境使用不同的 php.ini

#2


ini_set('display_errors','off');
error_reporting(0);

放在頁面最前試試。

#3


引用 1 楼 xuzuning 的回复:
如果你的错误出现在 ini_set('display_errors', 0); 之前
那么错误信息是一定要输出的
而致命错误多为语法错误,必然会出现在运行之前

你可以将错误信息定向到日志文件
也可以对开发环境和运行环境使用不同的 php.ini



可是版主,我现在公司的一台服务器错误报告是配置文件 里是打开的,但是出了致命错误时没有报,程序的一开始用了ini_set('display_errors', 0);  要我手动调 为 1才会报错,这又为什么?

#4


display_errors 是显示错误的意思
你把它关闭了,错误怎么能显示呢?
把错误信息重定向的文件,并不表示可以关闭 display_errors,只是改变了输出设备

有一些错误是要到运行时才会出现的,比如函数缺少参数,除数为0.....

#5


引用 4 楼 xuzuning 的回复:
display_errors 是显示错误的意思
你把它关闭了,错误怎么能显示呢?
把错误信息重定向的文件,并不表示可以关闭 display_errors,只是改变了输出设备

有一些错误是要到运行时才会出现的,比如函数缺少参数,除数为0.....


对呀,现应就是display_errors设置为0时不报错呀,但是我原贴里不是说了吗,还是会报

#6


是你被你自己弄糊涂了吧?
display_errors = On

这里所发生的错误都会报

ini_set('display_errors', 0);

这里所发生错误都不会报

#7


引用 6 楼 xuzuning 的回复:
是你被你自己弄糊涂了吧?
display_errors = On

这里所发生的错误都会报

ini_set('display_errors', 0);

这里所发生错误都不会报





应该是我表达不够直接了,
是这样的,现在PHP配置文件里不管是on 还是OFF ,
我希望程序里能通过那个ini_set函数或error_reporting函数快捷更改报错或屏蔽报错。都是无效。  但我在公司服务器上发现是有效的。是这样

#8


本帖最后由 xuzuning 于 2014-08-01 17:03:57 编辑
不要做这无谓的事情
1、如果关闭错误显示,那么在语法分析阶段所出现的错误将直接导致 HTTP 500 错
所以至少需要打开错误显示并重定向到错误日志
2、所有运行期间产生的错误都可以通过 set_error_handler 函数重定向到自定义的错误处理程序
在自定义的错误处理程序中,你就可以按你的意愿实现期望的动作了

#1


如果你的错误出现在 ini_set('display_errors', 0); 之前
那么错误信息是一定要输出的
而致命错误多为语法错误,必然会出现在运行之前

你可以将错误信息定向到日志文件
也可以对开发环境和运行环境使用不同的 php.ini

#2


ini_set('display_errors','off');
error_reporting(0);

放在頁面最前試試。

#3


引用 1 楼 xuzuning 的回复:
如果你的错误出现在 ini_set('display_errors', 0); 之前
那么错误信息是一定要输出的
而致命错误多为语法错误,必然会出现在运行之前

你可以将错误信息定向到日志文件
也可以对开发环境和运行环境使用不同的 php.ini



可是版主,我现在公司的一台服务器错误报告是配置文件 里是打开的,但是出了致命错误时没有报,程序的一开始用了ini_set('display_errors', 0);  要我手动调 为 1才会报错,这又为什么?

#4


display_errors 是显示错误的意思
你把它关闭了,错误怎么能显示呢?
把错误信息重定向的文件,并不表示可以关闭 display_errors,只是改变了输出设备

有一些错误是要到运行时才会出现的,比如函数缺少参数,除数为0.....

#5


引用 4 楼 xuzuning 的回复:
display_errors 是显示错误的意思
你把它关闭了,错误怎么能显示呢?
把错误信息重定向的文件,并不表示可以关闭 display_errors,只是改变了输出设备

有一些错误是要到运行时才会出现的,比如函数缺少参数,除数为0.....


对呀,现应就是display_errors设置为0时不报错呀,但是我原贴里不是说了吗,还是会报

#6


是你被你自己弄糊涂了吧?
display_errors = On

这里所发生的错误都会报

ini_set('display_errors', 0);

这里所发生错误都不会报

#7


引用 6 楼 xuzuning 的回复:
是你被你自己弄糊涂了吧?
display_errors = On

这里所发生的错误都会报

ini_set('display_errors', 0);

这里所发生错误都不会报





应该是我表达不够直接了,
是这样的,现在PHP配置文件里不管是on 还是OFF ,
我希望程序里能通过那个ini_set函数或error_reporting函数快捷更改报错或屏蔽报错。都是无效。  但我在公司服务器上发现是有效的。是这样

#8


本帖最后由 xuzuning 于 2014-08-01 17:03:57 编辑
不要做这无谓的事情
1、如果关闭错误显示,那么在语法分析阶段所出现的错误将直接导致 HTTP 500 错
所以至少需要打开错误显示并重定向到错误日志
2、所有运行期间产生的错误都可以通过 set_error_handler 函数重定向到自定义的错误处理程序
在自定义的错误处理程序中,你就可以按你的意愿实现期望的动作了