WordPress.org

Make WordPress Core

Ticket #19196: 19196.patch

File 19196.patch, 3.0 KB (added by kurtpayne, 2 years ago)

PHP error handler

  • wp-includes/load.php

     
    653653        return false; 
    654654} 
    655655 
     656/** 
     657 * Set up the php error handler 
     658 */ 
     659function wp_set_error_handler() { 
     660        global $wp_php_errors; 
     661        $wp_php_errors = array(); 
     662        set_error_handler( 'wp_error_handler' ); 
     663        if ( is_admin() ) 
     664                add_action( 'admin_footer', 'wp_show_errors' ); 
     665        else 
     666                add_action( 'wp_footer', 'wp_show_errors' ); 
     667} 
     668 
     669/** 
     670 * Resolve an error constant to its human readable name 
     671 * @param int 
     672 * @return string 
     673 */ 
     674function wp_error_constant($errno) { 
     675        $codes = array( 
     676                E_ERROR             => 'E_ERROR', 
     677                E_WARNING           => 'E_WARNING', 
     678                E_PARSE             => 'E_PARSE', 
     679                E_NOTICE            => 'E_NOTICE', 
     680                E_CORE_ERROR        => 'E_CORE_ERROR', 
     681                E_CORE_WARNING      => 'E_CORE_WARNING', 
     682                E_COMPILE_ERROR     => 'E_COMPILE_ERROR', 
     683                E_COMPILE_WARNING   => 'E_COMPILE_WARNING', 
     684                E_USER_ERROR        => 'E_USER_ERROR', 
     685                E_USER_WARNING      => 'E_USER_WARNING', 
     686                E_USER_NOTICE       => 'E_USER_NOTICE', 
     687                E_STRICT            => 'E_STRICT', 
     688                E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', 
     689                E_DEPRECATED        => 'E_DEPRECATED', 
     690                E_USER_DEPRECATED   => 'E_USER_DEPRECATED', 
     691        ); 
     692        return isset( $codes[$errno] ) ? $codes[$errno] : $errno; 
     693} 
     694 
     695/** 
     696 * Show PHP errors 
     697 */ 
     698function wp_show_errors() { 
     699        global $wp_php_errors; 
     700        if ( !is_array( $wp_php_errors ) ) 
     701                $wp_php_errors = array(); 
     702        foreach ( (array) $wp_php_errors as $err) : ?> 
     703                <div class="error">      
     704                        <div> 
     705                                <span class="php-errno"><?php echo wp_error_constant($err['errno']); ?></span> 
     706                                <?php echo __('in'); ?> 
     707                                <span class="php-errfile"><?php echo $err['errfile']; ?></span> 
     708                                <?php echo __('on line'); ?>:  
     709                                <span class="php-errstr"><?php echo $err['errstr']; ?></span> 
     710                        </div> 
     711                </div> 
     712                <?php 
     713        endforeach; 
     714} 
     715 
     716/** 
     717 * PHP error handler callback 
     718 * @param int Error code 
     719 * @param string Error message 
     720 * @param string File where error occurred 
     721 * @param int $errline Line number where error occurred 
     722 * @return void 
     723 */ 
     724function wp_error_handler($errno, $errstr, $errfile, $errline) { 
     725        global $wp_php_errors; 
     726        if ( !is_array( $wp_php_errors ) ) 
     727                $wp_php_errors = array(); 
     728    if ( error_reporting() & $errno ) { 
     729                $wp_php_errors[] = array( 
     730                        'errno'   => $errno, 
     731                        'errstr'  => $errstr, 
     732                        'errfile' => $errfile, 
     733                        'errline' => $errline 
     734                ); 
     735        } 
     736} 
     737 
    656738?> 
  • wp-settings.php

     
    7171require( ABSPATH . WPINC . '/class-wp-error.php' ); 
    7272require( ABSPATH . WPINC . '/plugin.php' ); 
    7373 
     74// Trap php errors 
     75wp_set_error_handler(); 
     76 
    7477// Include the wpdb class and, if present, a db.php database drop-in. 
    7578require_wp_db(); 
    7679