如何让PHP错误显示出来?

1986
我已经检查了我的 PHP ini 文件(php.ini),并且已经设置了 display_errors 和错误报告是 E_ALL。我已经重启了我的 Apache web 服务器。
我甚至在我的脚本顶部加入了这些行,但它甚至无法捕捉简单的解析错误。例如,我使用 "$" 声明变量,但我没有关闭语句";"。但所有我的脚本在出现这些错误时都显示一个空白页,但我希望实际上在浏览器输出中看到错误
error_reporting(E_ALL);
ini_set('display_errors', 1);

还有什么需要做的吗?


10
我尚未完全确定为什么有时候可以行得通,而有时候又不行,但对于任何想要快速切换PHP脚本中错误(或通过$_REQUEST参数启用它们)的人来说,这两行代码大多数情况下都能够奏效。 - brandonscript
你可以通过在php ini文件中启用xdebug来查看错误的详细信息。 - jewelhuq
1
大多数特定的编辑器/ IDE,例如Notepad++、Eclipse等都内置了语法检查和高亮功能。它们将显示您所描述的问题。请不要在生产环境中显示错误。黑客会喜欢这样做,因为在大多数情况下,路径会被显示出来。您可以定义错误/异常处理程序,在此处理程序中,您可以记录问题并向开发人员发送一封电子邮件,以便在出现问题时立即修复它。请参见https://www.php.net/manual/en/function.set-error-handler.php 和https://www.php.net/manual/en/function.set-exception-handler.php。 - Alexander Behling
27个回答

3
如果您已经安装了Xdebug,那么您可以通过设置以下内容来覆盖每一个设置:
xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

类型:整数,默认值:0,自Xdebug >= 2.3引入。如果将此设置为1,则无论PHP的display_errors设置如何,错误始终会被显示。

force_error_reporting

类型:整数,默认值:0,自Xdebug >= 2.3引入。此设置是一个位掩码,类似于error_reporting。该位掩码将与由error_reporting表示的位掩码逻辑OR,用于确定应显示哪些错误。此设置只能在php.ini中进行,并允许您强制显示某些错误,而不管应用程序使用ini_set()做什么。


3

只需编写:

error_reporting(-1);

2

如果是在命令行中,您可以使用-ddisplay_errors=1运行php来覆盖php.ini中的设置:

php -ddisplay_errors=1 script.php

2
在Unix的CLI中,将仅错误输出到文件非常实用。
./script 2> errors.log

从您的脚本中,像往常一样使用var_dump()或等效方法(STDOUT和STDERR都将接收输出),但仅写入日志文件
fwrite(STDERR, "Debug infos\n"); // Write in errors.log^

然后在另一个终端中,进行实时更改:
tail -f errors.log

或者简单地
watch cat errors.log

这如何回答关于PHP的问题? - Peter Mortensen
./script 是一个 PHP CLI 脚本(hashbang #!/usr/bin/php)。您可以通过这种方式将 PHP 错误重定向到文件中。这是 Unix 管道。这不是作为 CGI 的 PHP。 - NVRM

1

报告所有错误,除了 E_NOTICE 错误。

error_reporting(E_ALL & ~E_NOTICE);

显示所有PHP错误
error_reporting(E_ALL);  or ini_set('error_reporting', E_ALL);

关闭所有错误报告。
error_reporting(0);

0

如果您使用的是SharedHosting计划(例如在hostgator上)...只需添加

php_flag display_errors 1

.htaccess 文件上传到远程文件夹可能不会产生在服务器上生成的实际警告/错误。

您还需要编辑 php.ini

这是通过cPanel执行此操作的方法(在hostgator共享托管计划上测试)

登录cPanel后,搜索 MultiPHP INI Editor 。 它通常位于软件部分下面的cPanel项目列表中。

MultiPHP INI Editor 页面上……您可以保持在 basic mode 标签上,并仅勾选显示错误的行上的按钮。 然后单击应用按钮保存。

enter image description here

重要提示:请记得在调试完成后关闭它,因为这不适用于公共服务器。

0

由于不清楚您使用的操作系统,以下是我的两个建议。如果您正在使用XAMPP,您需要在C:\xampp\php下手动创建logs文件夹。这并非您的错,ApacheFriends忽略了这个步骤。

要阅读和遵循此文件,请执行以下步骤。

Get-Content c:\xampp\php\logs\php_error_log -Wait

要在VSCode中完成此操作,请在.vscode\tasks.json中创建一个任务。

{ 
  // See https://go.microsoft.com/fwlink/?LinkId=733558 
  // for the documentation about the tasks.json format 
  "version": "2.0.0", 
  "tasks": [ 
    { 
      "label": "Monitor php errors", 
      "type": "shell", 
      "command": "Get-Content -Wait c:\\xampp\\php\\logs\\php_error_log", 
      "runOptions": { 
        "runOn": "folderOpen" 
      } 
    } 
  ] 

并在文件夹加载时运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接