programing

Wordpress 4.9+에서 admin-ajax.php의 PHP 오류 표시

bestprogram 2023. 2. 26. 16:24

Wordpress 4.9+에서 admin-ajax.php의 PHP 오류 표시

다양한 작업을 수행하는 커스텀 엔드포인트가 몇 개 설정되어 있으며, 이를 통해 액세스합니다./wp/wp-admin/admin-ajax.php?action=some_action

그러나 구문, 논리, 치명적 등의 오류가 발생할 때마다 브라우저에서 페이지를 볼 때 단순히 "500 내부 서버 오류"가 발생합니다.

사이트상의 다른 페이지마다 오류가 발생하면 디버깅에 도움이 되도록 PHP 오류가 표시됩니다.

단, 에러가 발생한 경우admin-ajax.php그런 다음 PHP 로그 파일을 열어 오류를 대신 확인해야 합니다. 이는 현재 개발 중인 PHP 로그 파일보다 더 큰 문제입니다.

이 URL 네임스페이스에서 오류 표시를 비활성화하는 wordpress가 있습니까?만약 그렇다면 브라우저에 오류가 렌더링되도록 하려면 어떻게 해야 할까요?

여기에 이미지 설명 입력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 오류를 볼 수 있습니다.디버깅이 끝나면 반드시 실행 취소해 주세요!

뛰어난 솔루션

오류가 발생하기 전에 PHP 오류 출력 사용

PHP 오류 출력을 사용하려면 이 항목을 추가하십시오.

@ini_set( 'display_errors', 1 );

예: 이 경우 ajax 콜백 함수 시작 시

힌트:

개발 도구 네트워크의 응답 탭 옆에 있는 미리 보기 탭을 사용하여 오류 출력에서 HTML을 렌더링할 수 있습니다.HTML 없이도 에러를 볼 수 있도록

이미지

설명.

WordPress가 이 오류 출력을 활성화하지 않는 이유는 알 수 없지만 WordPress Core 파일을 편집하고 디버깅한 후 실행 취소하는 것은 여기서 대답한 바와 같이 좋은 생각이 아닙니다.

그 대답으로부터, 나는 우리가 단지 그것을 설정하기만 하면 된다는 것을 알았다.display_errorsPHP 초기화 설정true또는1에러를 출력하기 위해서입니다.

그러니까 우리가 하고 싶은 대로 설정해두면 어떨까?display_errors는, 그 스코프에 대해서만 유효하게 됩니다.

다른 답변과 달리 실행 취소하지 않으셔도 문제 없습니다.

편집wp-includes/class-wp-fatal-error-handler.php이것을 변경해 주세요.display_default_error_template( $error, $handled )(행: 193):

$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개발 도구를 사용합니다.

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.log아래wp-content디버깅 표시도 이미 송신된 헤더의 문제를 일으키기 때문에, 통상, 디버깅 표시도 오프인 채로 합니다.

편집:

때문에, 에러 는, 「」 행에 가 되어 것이 합니다.wp_debug_mode()wp-includes/load.php

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

언급URL : https://stackoverflow.com/questions/49489131/displaying-php-errors-from-admin-ajax-php-in-wordpress-4-9