如何让PHP显示错误:新手完整指南

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

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

开始课程

引言:为什么PHP在出问题时保持沉默?

\n\n

您是否曾经编写过PHP脚本,在浏览器中运行它——然后看到……一个空白的白色页面?没有任何消息,没有任何提示。只有沉默和一种您做错了什么的感觉。熟悉吗?

\n\n

这是PHP新手最常遇到的问题之一。Stack Overflow上关于“How can I get useful error messages in PHP?”的问题已经积累了数千次浏览。这并不奇怪:没有清晰的错误消息,调试就变成了猜谜游戏。

\n\n

在本文中,我们将探讨如何让PHP“开口说话”,让它诚实地告诉您到底哪里出了问题。您将了解哪些设置控制错误输出,如何在开发的不同阶段启用它们,以及如果错误仍然不显示该怎么办。开始吧!

\n\n

为什么PHP默认隐藏错误?

\n\n

在我们开始调整设置之前,先来理解原因。PHP是一种在服务器上运行的语言。在生产服务器上向用户显示错误是不好的做法。想象一下:客户看到的不是漂亮的电商页面,而是类似Fatal error: Call to undefined function的内容。这不仅不美观,而且不安全——攻击者可能会了解到您代码的结构。

\n\n

因此,PHP开发者默认禁用了向浏览器输出错误的功能。但在本地服务器(例如OpenServer、XAMPP、MAMP)或开发阶段,这会严重妨碍工作。让我们来修复这个问题。

\n\n

方法1:通过php.ini全局启用错误

\n\n

最可靠的方法是修改配置文件php.ini。在您的PHP文件夹(或本地服务器的控制面板)中找到它。打开文件并找到(或添加)以下行:

\n\n
display_errors = On\nerror_reporting = E_ALL\n
\n\n

这意味着什么?

\n
    \n
  • display_errors = On — 允许将错误直接输出到屏幕(浏览器或控制台)。
  • \n
  • error_reporting = E_ALL — 告诉PHP显示所有类型的错误:从警告(warnings)到致命错误。
  • \n
\n\n

修改后,重新启动Web服务器(Apache、Nginx)。现在任何脚本都会输出错误。

\n\n

重要提示: 在生产服务器上,切勿保留display_errors = On。请使用Off并配置日志记录(见下文)。

\n\n

方法2:在脚本中直接启用错误(快速方法)

\n\n

如果您无法访问php.ini(例如,您在使用共享主机),或者您只想为单个文件启用错误,请使用ini_set()和error_reporting()函数。在您的PHP脚本最开头添加这些行:

\n\n
<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n// 您的后续代码\n$foo = 1/0; // 会触发 Warning: Division by zero\n?>\n
\n\n

逐行解释:

\n
    \n
  • ini_set('display_errors', 1) — 启用错误输出到屏幕。
  • \n
  • ini_set('display_startup_errors', 1) — 启用PHP启动时发生的错误(例如,如果脚本本身无法加载)。
  • \n
  • error_reporting(E_ALL) — 显示所有级别的错误。
  • \n
\n\n

此方法立即可用,无需重启服务器。非常适合快速调试。

\n\n

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

\n\n

如果您使用Apache服务器,可以通过网站根目录下的.htaccess文件启用错误。在其中添加:

\n\n
php_flag display_errors on\nphp_value error_reporting E_ALL\n
\n\n

保存文件后,该文件夹及其子文件夹中的所有脚本都会开始显示错误。当您需要快速启用调试时非常方便。

博客

书籍推荐