Exibindo a saída quando o erro “O plugin gerou x caracteres de saída inesperada durante a ativação” é acionado

4

Estou trabalhando em um plugin e tendo algumas dificuldades para criar uma nova tabela. Eu recebo o erro "O plugin gerado x caracteres de saída inesperada durante a ativação". Existe uma maneira de visualizar o erro real? Acredito que um redirecionamento esteja envolvido nesse processo, daí a razão pela qual não vejo a saída de erro real. Eu tenho todo o relatório de erros e o logon, mas ainda não recebo nada.

    
por tollmanz 28.07.2011 / 02:27

3 respostas

2

Curiosamente, a capacidade de exibir erros e saída de um plug-in na ativação parece ser incorporada ao WordPress. Se você der uma olhada em wp-admin/plugins.php , há um caso na declaração $action switch que diz error_scrape - insinuado na resposta de Lars.

Parece com isso:

<?php
// wp-admin/plugins.php
case 'error_scrape':
    if ( ! current_user_can('activate_plugins') )
        wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));

    check_admin_referer('plugin-activation-error_' . $plugin);

    $valid = validate_plugin($plugin);
    if ( is_wp_error($valid) )
        wp_die($valid);

    if ( ! WP_DEBUG ) {
        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 );
    }

    @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
    // Go back to "sandbox" scope so we get the same errors as before
    function plugin_sandbox_scrape( $plugin ) {
        include( WP_PLUGIN_DIR . '/' . $plugin );
    }
    plugin_sandbox_scrape( $plugin );
    do_action('activate_' . $plugin);
    exit;
    break;

Como você pode ver, ele imita o senario de ativação do plugin, mas na verdade não ativa o plugin. Inclui o arquivo de plug-in, chama o gancho de ativação e sai. Ele faz tudo isso sem buffer de saída para que você possa ver o que está acontecendo.

Então, se já estiver lá, só precisamos expor isso. Um pouco de escavação em wp-admin/plugins.php mostra que precisamos de um nonce para verificar. Assim, podemos copiar isso e estudar como a tabela de listas de plugins cria seus links de ativação. Em seguida, basta adicionar um link de erro de raspar nos plug-ins inativos. Clique nele e veja seus erros.

Conecte-se a plugin_action_links e adicione o link:

<?php
add_filter('plugin_action_links', 'wpse24278_add_scrape', 10, 2);
/**
 * Add an "Error Scrape" action to inactive plugins.
 *
 * @uses    is_plugin_active
 * @return  array
 */
function wpse24278_add_scrape($actions, $plugin)
{
    global $status, $page, $s;

    // leave active plugins alone
    if (is_plugin_active($plugin)) {
        return $actions;
    }

    // build the url, identical to the activate URL, see the
    // plugings list table for more information.
    $url = add_query_arg(array(
        'action'            => 'error_scrape',
        'plugin'            => $plugin,
        'plugin_status'     => $status,
        'paged'             => $page,
        's'                 => $s,
    ), admin_url('plugins.php'));

    // add our action.
    $actions['error_scrape'] = sprintf(
        '<a href="%s" title="%s" class="edit">%s</a>',
        wp_nonce_url($url, 'plugin-activation-error_' . $plugin), // see 'wp-admin/plugins.php' for the nonce name
        esc_attr__('Check for Errors', 'wpse'),
        esc_html__('Error Scrape', 'wpse')
    );

    return $actions;
}

Aqui está o incluído em um plug-in acima.

    
por chrisguitarguy 03.02.2013 / 06:22
1

Pergunta interessante, então eu dei uma olhada no Google e um cara chamado Jason teve uma solução:

br_trigger_error('Some error message', E_USER_ERROR);

function br_trigger_error($message, $errno) {
  if(isset($_GET['action'])
      &amp;&amp; $_GET['action'] == 'error_scrape') {
    echo '<strong>' . $message . '</strong>';
    exit;
} else {
    trigger_error($message, $errno);
}
}

De enlace que tem mais detalhes também.

    
por Lars Koudal 10.08.2012 / 17:54
0

Acabei de encontrar uma maneira, todos os acessórios para itzco e hungrycoder . Eu adicionei os parâmetros de gancho.

add_action( 'activated_plugin', 'save_error_wpse_24278', 10, 2 );

function save_error_wpse_24278( $plugin, $network_wide )
{
    file_put_contents( 
        WP_CONTENT_DIR. '/error_activation.html', 
        $plugin . ob_get_contents() 
    );
    //update_option( 'plugin_error',  ob_get_contents() );
}
    
por brasofilo 03.02.2013 / 05:03

Tags