wp-config.phpに以下の様な記述を追加すると、デバッグモードとして動作するようになります。
1 |
define('WP_DEBUG', true); |
wp-config.php の編集
バージョン 2.3.1 で追加された WP_DEBUG オプションを有効化すると、一部のエラーや警告のレポートを制御し WP_DEBUG_DISPLAY と WP_DEBUG_LOG の設定が使えるようになります。デフォルト値は false になっています。
こうすると画面にエラーが表示されるようになるのですが、これってdisplay_errosを設定するのと何が違うの?と気になったので簡単ですが調べてみました。
余談ですがPHPでエラーメッセージを表示させたい場合は以下のような記述をphp.iniかソースに追加します。
1 2 3 4 5 |
//php.iniに記述する場合 display_errors = On //ソースに直接記述する場合 ini_set( 'display_errors', 1 ); |
ADs
以下の処理が実行されます。
1 2 |
error_reporting( E_ALL ); ini_set( 'display_errors', 1 ); |
実際のソースはwp-includes/load.phpにあります。
なお、WP_DEBUG_DISPLAYはデフォルトではtrueなので、WP_DEBUGのみの設定の場合は「ini_set( ‘display_errors’, 1 );」となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* wp-includes/load.phpの261行目から */ function wp_debug_mode() { if ( WP_DEBUG ) { error_reporting( E_ALL ); if ( WP_DEBUG_DISPLAY ) ini_set( 'display_errors', 1 ); elseif ( null !== WP_DEBUG_DISPLAY ) ini_set( 'display_errors', 0 ); if ( WP_DEBUG_LOG ) { ini_set( 'log_errors', 1 ); ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' ); } } else { error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); } if ( defined( 'XMLRPC_REQUEST' ) ) ini_set( 'display_errors', 0 ); } |
PHPは式の前に「@」をつけるとエラーメッセージを表示させないようにすることができます。
WP_DEBUGがtrueの場合、一部の式の「@」を無しにしてエラーを吐くようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//wp-include/cron.phpの259行目あたり //include_onceのエラーを抑制しています WP_DEBUG ? include_once( ABSPATH . 'wp-cron.php' ) : @include_once( ABSPATH . 'wp-cron.php' ); //wp-include/class-http.phpの1204行目あたり //fopenのエラーを抑制しています if ( ! WP_DEBUG ) $this->stream_handle = @fopen( $r['filename'], 'w+' ); else $this->stream_handle = fopen( $r['filename'], 'w+' ); |
ここが単なるdisplay_errosによる設定と大きく違うところではないかと思うのですが、非推奨関数に対してtrigger_error関数によるエラーメッセージを出力します。
Function Reference
(deprecated)と書いてあるものが非推奨
ただこの非推奨関数についてのエラーメッセージは「deprecated_function_trigger_error」「deprecated_file_included」「deprecated_argument_trigger_error」「doing_it_wrong_trigger_error」というフィルターフックによりテーマ側から無効にすることができます。
実際のソースは以下のようにWP_DEBUGの真偽判定に加えて上記4つのフィルターフックによるif文となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//wp-includes/functions.phpの2904行目あたり //WP_DEBUGのtrue/falseのほか、それぞれのフィルターフックも条件となっている // Allow plugin to filter the output error trigger if ( WP_DEBUG && apply_filters( 'deprecated_function_trigger_error', true ) ) { if ( function_exists( '__' ) ) { if ( ! is_null( $replacement ) ) trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) ); else trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) ); } else { if ( ! is_null( $replacement ) ) trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $function, $version, $replacement ) ); else trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', $function, $version ) ); } } |
長らくdisplay_errorsでいいじゃん、と思ってましたが、非推奨関数への注意は便利だと思うので積極的に使っていきたいです。
ADs
コメントはまだありません。