【发布时间】:2016-06-02 10:00:41
【问题描述】:
我遇到了 WordPress 插件中生成的错误问题,这使我的开发变得困难。
如果我像这样在普通 PHP 文件中触发错误:
trigger_error("an error occurred", E_USER_ERROR);
它工作正常,我会在页面上显示错误。但是,如果我在插件代码中尝试相同的操作,服务器会在浏览器中生成 500 错误并且不显示错误。
此外,当插件代码发生时,它也不会在 PHP-FPM 或 Nginx 日志文件中记录任何错误。这使得开发变得非常困难,因为当我遇到错误时,我没有任何信息可以继续。
由于这在独立 PHP 中运行良好,我假设它必须与 WordPress 相关。
我在 wordpress 中启用了调试。我的堆栈如下:
- Ubuntu 16.04
- PHP 7.0.4
- Nginx 1.10.0
- MariaDB 10.0.24
文件所有权为user:www-data。目录为 775,文件为 664
在 PHP conf 文件中启用了错误,我可以看到独立 PHP 页面的错误很好,它只是在 WordPress 插件 PHP 页面中发生错误的上下文中发生在服务器上。
这非常令人沮丧,因为我不明白为什么会这样。有没有人有任何见解可以帮助我解决这个问题?
编辑
这里更清楚的是我在 wp-config 中启用调试的功能:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
其他调试值默认为 true,所以这应该是我所需要的。
奇怪的是,我刚刚注意到 error_log() 不会在 WordPress 文件中执行任何操作,而 trigger_error() 会导致 500 错误。
这感觉像是某种基于权限的错误,但我不确定是什么。我真的需要一些帮助,因为在这种情况下开发几乎不可能没有任何错误文本。
【问题讨论】:
-
文件权限错误通常返回 403 错误,500 错误通常意味着服务器脚本失败,但如果它在错误日志中没有给出任何诊断,则可能您需要使用老式断点分析来先看看哪里坏了。更仔细地查看正在破坏的代码比大海捞针更容易。
-
该错误不是文件权限错误(我自己抛出),但它没有记录错误或显示它的事实让我认为这是 php/ 的权限错误nginx 以某种方式。这只是一种预感,如果我知道是什么原因造成的,那么我会修复它,但我在这里试图寻求帮助。我真的需要能够获取错误消息,逐行调试应用程序并检查值只是为了提示错误可能是什么,这对我来说似乎不是一个合适的解决方案。我只需要能够获取错误消息而不是使用解决方法。
-
一般错误是语言编写者没想到开发人员会尝试的全部错误。我会使用 try/catch 样式的错误测试/处理程序。如果 nginx 没有授予资源权限,这听起来像是配置错误或不存在,但很难说。您不能依靠火灾报警器来灭火,也不能使用火灾报警器来小心明火。错误消息可能会有所帮助,但确实为开发人员提供了可靠的安全网。我在下面看到您发现这是另一个插件中的错误。 Wordpress 插件过于全球化。