在Wordpress 4.9+中显示admin-ajax.php中的PHP错误

Owe*_*wen 4 php wordpress development-environment error-suppression

我们已经设置了一些自定义端点来执行各种操作,可以通过以下方式访问 /wp/wp-admin/admin-ajax.php?action=some_action

但是,只要在开发过程中出现错误(例如语法,逻辑错误,致命错误等)时,在浏览器中查看页面时,我们都只会收到“ 500 Internal Server Error”。

该站点上的每个其他页面出现错误时,都会向我们显示PHP错误,以帮助我们进行调试。

但是,当错误出自该admin-ajax.php区域时,我们必须打开我们的PHP Log文件来查看错误,这在积极开发时会更加痛苦

wordpress中是否有某些东西禁止在此URL名称空间上显示错误?如果是这样,我们如何防止这种情况允许在浏览器中呈现错误?

ABH*_*BHi 12

更好的解决方案

在错误发生之前启用 PHP 错误输出

添加此选项以启用 PHP 错误输出

@ini_set( 'display_errors', 1 );
Run Code Online (Sandbox Code Playgroud)

例如:在本例中 ajax 回调函数的开始处

提示:

您可以使用开发工具网络中“响应”选项卡旁边的“预览”选项卡在错误输出中呈现 HTML。这样您就可以在没有 HTML 的情况下看到错误

图像

解释

我不知道为什么 WordPress 不允许启用此错误输出,但我不认为编辑 WordPress 核心文件并在调试后撤消它们并不是一个好主意,如此处所回答

从这个答案中,我发现我们只需将display_errorsPHP 初始化设置设置为true1 即可输出错误。

那么,为什么我们不将其设置在我们希望其工作的任何地方,以便display_errors仅对该范围启用此功能。

如果您没有像其他答案那样撤消此操作,则没有问题


kb.*_*kb. 7

在此处输入图片说明如果要在使用ajax时看到PHP错误,请打开wp-includes / load.php文件并在336行上,更改此行:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }
Run Code Online (Sandbox Code Playgroud)

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 1 );
    }
Run Code Online (Sandbox Code Playgroud)

现在,您将能够在浏览器控制台中看到Ajax错误。完成调试后,请记住撤消此操作!

  • 截至 2018 年 12 月,行号现在为 353。 (3认同)
  • 行号可能会改变。因此在文件中搜索函数“wp_debug_mode”。要更改的行位于该函数内部。 (2认同)
  • 至于2021年6月,行号是471。您可以搜索文本“display_errors”并迭代找到的匹配项,很容易找到。 (2认同)

Tur*_*ead 1

https://codex.wordpress.org/Debugging_in_WordPress

 // Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );
Run Code Online (Sandbox Code Playgroud)

照此定义以下常量。您将能够debug.log在下面看到wp-content。我通常也会关闭调试显示,因为它会导致标头已发送问题。

编辑:

wp_debug_mode()显然,在该方法的最后一行中,ajax 请求的错误报告已关闭wp-includes/load.php

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }
Run Code Online (Sandbox Code Playgroud)