设置了error_reporting(E_ALL)还是不显示错误

本文介绍了如何在PHP项目中正确地配置错误显示,确保开发过程中能够及时发现并解决代码问题。通过调整php.ini文件中的display_errors选项及使用ini_set()函数配合error_reporting()函数,可以有效地定位错误来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP代码在调试的时候,有错误,不提示是一件很忧伤的事,难道你指望自己猜出问题所在么?当然不行,就算在最页面最开始执行了error_reporting(E_ALL),发现还是没有输出错误,其实原因就是在php.ini里面将display_errors关闭了。可以在php.ini里面将display_errors配置为On,然后重启php-fpm,如果服务器上既有测试项目,又有线上项目,那么还是不要开启,以防别人利用你的错误,而攻击你。

只需要再需要测试的项目里面加上

ini_set('display_errors','On');

error_reporting(E_ALL);

即可。


从以上可知,报错设置的优先级是,首先display_errors为On要打开,其次再开启error_reporting,如果display_errors设置为Off并且代码中也没有ini_set('display_errors','On');开启的话,那么无论怎么设置error_reporting(E_ALL);都是无效的~~~

<think>好的,用户问的是PHP中display_errors和error_reporting的区别,需要了解它们的作用范围、配置方法等等。首先,我得回忆一下这两个配置项各自的功能。 display_errors我记得是用来控制是否将错误信息输出到屏幕上的,比如在开发环境中打开它方便调试,但生产环境应该关闭,避免敏感信息泄露。而error_reporting则是设置错误报告的级别,决定哪些类型的错误会被记录或显示。比如E_ALL表示报告所有错误,E_ERROR只报告致命错误等等。 接下来,要区分它们的作用范围。display_errors是控制输出显示,属于输出层面的设置;而error_reporting是控制错误收集的级别,属于错误处理的前端设置。也就是说,即使error_reporting设置了报告所有错误,但如果display_errors关闭了,错误信息显示出来,但可能还是会被记录到日志里,如果log_errors是开启的话。 配置方法方面,这两个都可以在php.ini中设置,也可以通过ini_set()在运行时修改。过可能需要考虑php.ini中的设置是否会覆盖运行时设置,或者是否有权限修改。例如,某些主机可能禁止在脚本中修改display_errors。 另外,用户提到的引用中有关于错误处理的内容,比如引用[1]提到错误和异常的同机制,PHP的错误能被try/catch捕获,而display_errors和error_reporting都属于错误处理的配置。引用[5]提到线程安全的问题,过可能和当前问题关系大,但需要确认是否有其他相关点。 需要注意用户可能混淆这两个设置,比如认为error_reporting控制显示,但实际上它控制的是报告哪些错误,而显示由display_errors控制。还需要提到在生产环境中最佳实践,比如关闭display_errors,开启log_errors,将错误记录到日志文件,同时设置适当的error_reporting级别。 可能用户是在调试时遇到问题,比如看错误信息,需要检查这两个设置是否正确配置。或者想了解如何配置同的环境,比如开发和生产环境的设置。 最后,生成相关问题的时候,要考虑用户可能的后续疑问,比如如何设置错误日志,开发和生产环境配置差异,或者如何动态修改这些设置等。</think>### PHP中display_errors与error_reporting的区别 #### 1. **核心功能** - **`error_reporting`** 定义PHP错误报告的级别,决定哪些类型的错误会被触发。例如设置`E_ALL`会报告所有错误,而`E_ERROR`仅报告致命错误。其作用范围是全局的,控制错误信息的**收集与记录**[^1]。 示例配置: ```php error_reporting(E_ALL & ~E_NOTICE); // 报告所有错误,但忽略通知类错误 ``` - **`display_errors`** 控制是否将错误信息直接输出到屏幕(如浏览器或命令行)。属于**输出层面**的配置,影响错误是否被记录到日志。 示例配置: ```php ini_set('display_errors', 1); // 开发环境开启 ini_set('display_errors', 0); // 生产环境关闭 ``` #### 2. **作用范围** | 配置项 | 作用范围 | 影响对象 | |------------------|-----------------------|------------------------| | `error_reporting`| 全局或脚本级别 | 错误触发与记录 | | `display_errors` | 输出层(显示与否) | 错误信息的可视化输出 | #### 3. **配置方式** - **php.ini文件** ```ini error_reporting = E_ALL display_errors = On ``` - **运行时动态修改** ```php error_reporting(E_ALL); ini_set('display_errors', 1); ``` *注意:某些主机可能限制`display_errors`的运行时修改权限*。 - **.htaccess(仅Apache)** ```apache php_value error_reporting 32767 php_flag display_errors Off ``` #### 4. **实际应用场景** - **开发环境** 建议同时启用`display_errors`和`error_reporting(E_ALL)`,便于实时调试。 - **生产环境** 关闭`display_errors`以避免敏感信息泄露,但保持`error_reporting`记录错误到日志: ```php ini_set('log_errors', 1); // 启用日志记录 ini_set('error_log', 'path/to/error.log'); ``` #### 5. **常见误区** - **错误显示 ≠ 未发生** 若`display_errors=Off`但`error_reporting`级别包含该错误错误仍会被记录到日志。 - **优先级问题** `error_reporting`设置错误级别必须包含某错误类型,`display_errors`才能处理其显示。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值