如何让PHP显示所有错误:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“PHP显示白屏,但我需要错误信息!”——熟悉的情况?



您编写PHP代码,运行脚本,结果却是空白。或者更糟,出现某种奇怪的错误,却没有任何关于原因的提示。熟悉吗?如果您曾经问过自己“How can I get useful error messages in PHP?”——您并不孤单。这个问题在Stack Overflow上获得了数千次浏览,这并非偶然。PHP默认配置为在生产服务器上隐藏错误,但在开发阶段,这变成了真正的头痛问题。



在本文中,我们将详细讲解所有让PHP用您能理解的语言“说话”的方法。您将了解如何启用错误显示、配置错误详细程度以及记录错误,让调试不再像猜谜。开始吧!



为什么PHP保持沉默?问题的根源——服务器配置



在我们学习如何获取有用的错误信息之前,先来理解为什么没有错误信息。PHP是一种具有严格安全理念的语言。在生产服务器上向用户显示错误是不好的做法,也是安全威胁。因此,在php.ini(PHP的主配置文件)中,默认设置了以下选项:



  • display_errors = Off —— 错误不输出到屏幕。
  • error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT —— 不显示所有类型的错误。


但对于本地开发来说,这简直是灾难。如何修复?有三种主要方法。



方法1:修改php.ini(如果有访问权限)



最可靠的方法是编辑php.ini文件。找到它(通常位于PHP安装根目录或Linux的etc/文件夹中)。然后找到并修改以下行:



; 启用错误输出到屏幕display_errors = On

; 设置最大报告级别(所有错误,除了弃用通知)error_reporting = E_ALL


修改后,务必重启Web服务器(Apache、Nginx或PHP内置服务器),否则配置不会生效。



重要: 在生产服务器上,display_errors必须始终为Off。此方法仅用于开发环境。



方法2:使用.htaccess(适用于Apache)



如果您没有php.ini的访问权限,但使用Apache,可以通过网站根目录下的.htaccess文件覆盖配置。在其中添加:



php_flag display_errors onphp_value error_reporting E_ALL


如果Apache允许覆盖PHP指令(大多数主机通常允许),这将生效。



方法3:在代码中直接启用错误(最灵活)



这是我最喜欢的快速调试方法。您可以将这些行插入到脚本的开头(紧跟在<?php之后):



<?php// 启用最大错误报告级别error_reporting(E_ALL);

// 启用错误输出到屏幕ini_set('display_errors', 1);

// 启用启动错误输出(例如,如果ini_set本身出错)ini_set('display_startup_errors', 1);?>


现在,任何Warning、Notice或Fatal Error都会直接显示在浏览器中。很方便,对吧?



PHP中有哪些错误类型及其含义?



要读懂PHP的“信号”,您需要了解它们的语言。以下是您最常看到的主要错误类型:



  • E_ERROR —— 致命错误。脚本停止运行。例如:调用不存在的函数。
  • E_WARNING —— 警告。脚本继续运行,但出现问题。例如:include()一个不存在的文件。
  • E_NOTICE —— 通知。不是错误,但存在潜在问题。例如:使用未定义的变量。<

博客

书籍推荐