12

我们已经设置了一些自定义端点来做各种事情,我们通过/wp/wp-admin/admin-ajax.php?action=some_action

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

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

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

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

4

4 回答 4

19

在此处输入图像描述如果您想在使用 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 );
    }

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 1 );
    }

您现在可以在浏览器控制台中看到 ajax 错误。请记住在完成调试后撤消此操作!

于 2018-04-09T09:48:32.773 回答
3

更好的解决方案

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

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

@ini_set( 'display_errors', 1 );

例如:在这种情况下,在 ajax 回调函数的开头

小费:

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

图片

解释

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

从那个答案中,我发现我们只需要将display_errorsPHP init 设置设置为trueor1 即可输出错误。

那么为什么我们不把它设置在我们希望它工作的任何地方display_errors,以便只为那个范围启用它。

与其他答案不同,如果您没有撤消此操作,则没有问题

于 2021-06-16T19:59:15.720 回答
2

在(行:193)中编辑wp-includes/class-wp-fatal-error-handler.php和更改它:display_default_error_template( $error, $handled )

$message = sprintf(
                        '<p>%s</p><p><a href="%s">%s</a></p>',
                        $message,
                        /* translators: Documentation explaining debugging in WordPress. */
                        __( 'https://wordpress.org/support/article/debugging-in-wordpress/' ),
                        __( 'Learn more about debugging in WordPress.' )
                );

$message = sprintf(
                        '<p>%s</p><p><a href="%s">%s</a></p>',
                        $message . ' ' . json_encode($error),
                        /* translators: Documentation explaining debugging in WordPress. */
                        __( 'https://wordpress.org/support/article/debugging-in-wordpress/' ),
                        __( 'Learn more about debugging in WordPress.' )
                );

然后预览 HTML 响应以admin-ajax.php使用开发工具。

于 2020-10-15T05:16:29.567 回答
0

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 );

像这样定义以下常量。您将能够debug.logwp-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 );
    }
于 2018-03-26T16:41:31.667 回答