滚动新闻 →
沙特联军大规模行动 摧毁“胡塞武装”上百个目标 家庭换门锁需要注意什么 韩国大邱超市天花板崩落 至少38人轻伤 GPU 利用率很高是否意味着 AI 系统性能很好,还有哪些指标必须同时观察 Google Cloud Storage 上传大文件有哪些方法,断点续传和并行上传应该如何选择 支付成功以后 SaaS 怎么知道?从支付通知到开通会员完整理解 笔记本电脑屏幕突然黑屏,但外接显示器正常,应该检查哪些部件 今年第3次 屏东万丹泥火山无预警喷发 宋佳凭一角色拿下三大奖 疑背后有推手 今年最后“水星东大距”10/12登场 把握观测机会 Windows 11 文件夹怎么批量重命名?不用逐个修改文件名称 诺贝尔奖得主警告:法国债务“大到救不起” PHP Cookie 怎么使用?网站记住用户状态时需要注意哪些问题 从王维诗歌看中国传统审美 五味与传统饮食观念 华为刹车板断裂事件持续发酵 业内专家判断一致 崩溃!小伙子上山采蘑菇 误用粪瓢舀泉水喝 行书究竟介于楷书和草书之间吗 天津武清半马赛 42岁男子猝死 家属要真相 湖北烟花爆燃12人死 顾客试放“震天雷”所致 如何培养孩子尊重清洁工和普通劳动者 川普放宽俄柴油制裁 泽连斯基呛:送普京大礼 广州“砍树书记”落马 湖南帮传闻再受关注 高帧率视频适合拍什么 巴拿马7.7强震 路毁屋塌 全国学校停课 涉转运英伟达AI晶片服务器至中国 美超微包商认罪 曾带百车进死胡同 网红车出游获“隔离保护” 烂柯杯战火重燃 韩国反客为主 八强占五席 三国时代为什么会形成 北京一景区小马被游客骑断腰椎 瘫坐在地死亡 115年国庆大会登场 展现台湾民主活力团结韧性 华为百万豪车刹车断裂 测评视频接连下架惹议 川普高调庆祝哥伦布日 批共产主义议程 “星链”挑战三大电信巨头 或颠覆美通讯市场 伊萨亚斯升级三级飓风 佛州阿拉巴马严阵以待 卫生间洗手台下面的空间如何利用 南非法官皮莱获诺贝尔和平奖 美国同日制裁ICC ICE抓移民 纽约首爆枪案 市长与部长隔空激辩 干燥地区为什么会形成独特的肉类保存方式 中国籍大学篮球运动员 因签证过期被ICE拘留

PHP 报错信息怎么看?开发阶段应该如何打开和关闭错误显示

发布时间: 2026-09-19 00:30:01    最后更新: 2026-10-09 22:24:24    阅读:69  约8 分钟阅读     

PHP 报错信息怎么看?开发阶段应该如何打开和关闭错误显示
图片说明:示意图   图片来源:Public Domain(公有领域)
PHP程序出现报错时,错误信息往往是开发者判断问题所在的第一条线索。一个完整的错误提示通常会告诉你发生了什么问题、涉及哪个文件以及大致位于哪一行,因此正确理解错误信息,比单纯看到页面空白后不断修改代码更加有效。PHP的错误显示和错误记录由多个配置共同控制,开发环境和正式网站的处理方式也应该有所区别。

在本地开发或者测试网站时,通常应该尽可能让PHP显示完整的错误信息。这样做的目的不是让页面看起来更复杂,而是让开发者能够及时发现变量未定义、函数调用错误、文件加载失败以及其他代码问题。PHP官方文档也建议开发环境使用E_ALL,以便开发者看到PHP报告的各种问题;而在生产环境中,则应关闭直接向访问者显示错误的功能。

控制PHP错误显示最常见的配置是display_errors。这个配置决定PHP产生的错误是否直接作为网页输出的一部分显示出来,如果设置为On,符合条件的错误可能直接出现在浏览器页面中,如果设置为Off,则不会直接显示给访问者。需要注意的是,display_errors只是控制错误是否显示,并不等于错误是否发生,也不等于错误是否被记录到日志中。

开发环境中通常可以使用下面这样的配置:

error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');

其中error_reporting决定PHP需要报告哪些级别的问题,E_ALL表示报告全部错误级别。display_errors负责把错误显示出来,而display_startup_errors主要涉及PHP启动阶段产生的问题。PHP官方文档指出,某些错误发生在脚本真正执行之前,因此单纯在PHP代码中使用ini_set并不一定能够显示这些错误。

如果网站出现空白页面,开发者经常会在入口文件最前面临时加入这几行配置。这种方法对于快速定位问题非常实用,但它更适合作为开发和排查故障的临时措施,而不应该长期保留在正式网站上。尤其是网站已经部署到互联网以后,如果错误信息直接输出到页面,错误提示中可能包含服务器路径、数据库连接信息、文件位置以及其他不应该公开的数据。

生产环境最重要的原则,是不要让普通访问者直接看到PHP内部错误。PHP官方文档明确建议生产网站关闭display_errors,同时使用错误日志记录问题。这样既可以避免敏感信息暴露,也不会因为关闭页面显示而完全失去故障排查能力。

与display_errors配合使用的另一个重要配置是log_errors。它决定PHP产生的错误是否写入服务器错误日志,而error_log可以指定日志记录的位置。生产网站通常应该关闭页面上的错误显示,同时开启错误日志,这样用户看到的是正常的错误页面,而开发者或者服务器管理员仍然可以从日志中找到具体原因。

例如,生产环境可以采用类似下面的配置:

error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');

这里需要特别区分error_reporting和display_errors。前者决定报告哪些问题,后者决定这些问题是否直接显示给用户,两者并不是同一个功能。生产环境并不意味着必须完全停止错误报告,更合理的做法通常是继续记录重要错误,同时避免把内部信息直接输出到网页。

PHP错误信息本身也有一定的阅读规律。常见提示通常会包含错误类型、具体描述、文件路径和行号,例如Undefined variable、Undefined array key、Call to undefined function或者Failed opening required等信息。看到错误以后,不应该只看最前面的错误名称,还应该结合文件名、行号以及产生错误的代码上下文判断问题究竟来自哪里。

例如Undefined array key通常意味着程序尝试读取一个不存在的数组键。造成这种情况的原因可能是表单没有提交对应字段,也可能是URL参数不存在,或者数据库查询结果与程序原本预期的数据结构不同。因此,不能看到一个错误就立即给出固定答案,而应该检查变量来自哪里、数据是否真的存在以及代码是否正确处理了缺失情况。

PHP不同版本对错误的处理方式也可能有所变化。过去某些问题可能只是Notice或者较轻的提示,而新版本可能会以更明显的Warning等形式出现,因此升级PHP以后突然出现大量错误,并不一定意味着服务器坏了,也可能是旧代码与新版本行为之间出现了兼容性问题。开发者应该根据具体错误信息检查代码,而不是简单地把所有提示关闭。

有些开发者遇到警告以后,会使用@符号把错误隐藏掉。虽然PHP确实提供错误控制运算符,但长期依赖这种方式并不能解决真正的问题,反而可能让开发者失去重要的调试信息。对于正式项目,更好的方式是找到产生警告的原因并修正代码,而不是让错误从页面和日志中消失。

服务器配置也是PHP错误处理中的一个重要环节。PHP可以通过php.ini以及其他允许修改配置的方式控制错误报告,具体能够在哪里修改,取决于服务器运行方式和配置权限。Apache环境下某些PHP配置可以通过服务器配置或者本地.htaccess进行调整,但不同PHP运行方式支持的配置项目并不完全相同,因此不能把一种服务器环境的配置方法直接套用到另一台服务器。

对于使用Nginx和PHP-FPM的网站,PHP通常不是由Nginx直接执行,而是通过FastCGI交给PHP-FPM处理。因此排查错误时,需要同时考虑Nginx日志、PHP-FPM日志以及PHP自身的错误日志。遇到500错误或者页面突然变成空白时,只修改网页代码并不一定能够找到问题,服务器日志往往能够提供更直接的线索。

如果网站使用WordPress或者其他PHP框架,还需要考虑框架自己的错误处理机制。有些框架会接管PHP错误并生成自己的错误页面,有些系统则会把异常写入独立日志。因此,如果php.ini已经开启错误显示,但浏览器仍然没有出现预期的错误信息,就应该检查框架或者应用程序自己的配置。

开发者还应该注意一个常见问题,那就是修改php.ini以后并不一定马上生效。PHP运行方式、PHP-FPM、Apache以及主机环境不同,配置文件的读取方式也可能不同。有时候修改的是一个php.ini文件,而实际运行网站的PHP使用的是另一个配置文件,因此排查配置问题时,可以通过phpinfo或者其他方式确认当前PHP实际加载的配置。

如果网站已经上线,比较稳妥的做法是让用户看到简洁的错误页面,同时把详细信息写入服务器日志。这样既能够避免文件路径、数据库信息和内部代码结构暴露给外部访问者,又可以让开发者在出现故障时通过日志定位问题。PHP官方文档同样建议生产环境使用错误日志,而不是直接向用户显示错误。

对于开发者来说,最实用的原则其实很简单。开发阶段应该尽可能打开E_ALL并显示错误,让问题尽早暴露出来;网站正式运行以后,则应该关闭display_errors,同时开启log_errors并妥善保存日志。这样处理,既方便开发和维护,也能够避免PHP错误信息直接暴露给网站访问者。

如果只是自己开发的网站,最容易记住的一套思路就是开发时看屏幕,生产时看日志。错误信息不是需要害怕的东西,而是PHP告诉开发者程序哪里出了问题的一种机制。真正需要避免的并不是错误本身,而是发现错误以后选择隐藏它,而没有找到产生错误的原因。

喜欢这篇报道?

使用下面的功能,方便以后继续阅读和分享 MNewsTV

设为 Google 新闻首选来源 让 Google 新闻优先显示 MNewsTV 的最新报道 ›
★ 我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

捐助(Paypal): https://www.paypal.me/observeccp
订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP