Desenvolvimento de plugins Wordpress - Cabeçalhos já enviados

11

Estou desenvolvendo plugins do Wordpress. Quando eu ativo meu plugin, estou recebendo uma mensagem

  

O plugin gerou 293 caracteres de   saída inesperada durante a ativação.   Se você notar "cabeçalhos já enviados"   mensagens, problemas com syndication   feeds ou outros problemas, tente   desativando ou removendo este plugin.

Plugin funcionando muito bem, mas não sei porque estou recebendo esta mensagem. Meu plugin é: enlace

    
por Eray 06.05.2011 / 15:23

8 respostas

8

Meu palpite é que você recebe um erro do PHP, que gera saída antes que os cabeçalhos sejam enviados. Se você tiver E_NOTICE ativado, chamar $_POST['foo'] poderá gerar um erro "Aviso: variável indefinida" se essa variável não estiver definida.

Prática recomendada: nunca assuma nada sobre as variáveis GET, POST, COOKIE e REQUEST. Sempre verifique primeiro usando isset() ou empty() .

if ( isset( $_POST['foo'] ) ) {
    $foo = (string) $_POST['foo'];
    // apply more sanitizations here if needed
}
    
por Geert 06.05.2011 / 16:17
13

Isso geralmente é causado por espaços ou novas linhas antes da tag <?php de abertura ou após a tag ?> de fechamento.

Confira esta página para ver algumas soluções: Como resolvo o problema de aviso de Cabeçalhos já enviado?

UPDATE

Depois de examinar o código do seu plugin, a única coisa que notei é que você não tem uma tag PHP de fechamento. Na última linha, adicione ?>

    
por Matthew Muro 06.05.2011 / 15:40
4

No início da sua função de ativação, coloque um ob_start(); e, no final, coloque um trigger_error(ob_get_contents(),E_USER_ERROR);

Em seguida, tente ativar seu plug-in e você poderá ver o que ' gerou 293 caracteres de saída inesperada ' realmente são. A partir daí, a depuração será mais fácil (remover novos caracteres de linha ou resolver alguns erros).

    
por lulalala 26.09.2011 / 09:54
3

Já enfrentei o mesmo problema antes, para mim era um espaço extra em branco. Depois de remover todos esses espaços em branco, o plug-in pode ser ativado sem nenhum erro / aviso.

    
por yashbinani 25.12.2011 / 13:01
1

Não estou certo de que este seja o problema, mas tenho certeza disso.

Você precisa usar um retorno de chamada válido como o segundo argumento em register_activation_hook() :

register_activation_hook(__FILE__,'twl_tablo_olustur');

Tanto quanto eu posso dizer, você não definiu twl_tablo_olustur() em qualquer lugar. Isso certamente explicaria a saída inesperada (erro de PHP gerado ao tentar chamar uma função inexistente) e explicaria por que ela funciona bem em todas as outras circunstâncias.

    
por John P Bloch 06.05.2011 / 16:18
1

Eu costumo receber muito essas mensagens quando estou exibindo mensagens de depuração de plugin / theme, especialmente quando estou produzindo coisas antes de wp_header ser chamado.

Se você está enviando qualquer caractere, então eu acredito (pode estar errado aqui) que há uma declaração de cabeçalho implícita, então quando a chamada normal header () ocorrer, você obtém o erro, pois não pode ter 2 declarações de cabeçalho .

Você pode usar ob_start () para armazenar em buffer a saída, o que deve remover o erro - dê uma olhada nos comentários aqui: enlace

    
por anu 06.05.2011 / 16:58
0

Olhando para a última revisão do plugin (381724), o problema é Demasiados espaços

sempre que você quiser criar essa estrutura:

function blabla(){
   <= space
   something...
}

no seu código, use TAB e não espaços.

Aqui está o código onde eu substituí todos os espaços por abas e não recebo nenhuma mensagem na ativação:

<?php
/*
Plugin Name: Facebook Send Button By Teknoblogo.com
Plugin URI: http://www.teknoblogo.com/facebook-gonder-butonu-eklenti
Description: Adds Facebook's Send and Like buttons to your posts ! Author : <a href="http://www.teknoblogo.com">teknoblogo.com</a>
Version: 1.3
Author: Eray Alakese
Author URI: http://www.teknoblogo.com
License: GPL2
*/

wp_register_script('fgb_script', "http://connect.facebook.net/en_US/all.js#xfbml=1");
wp_enqueue_script('fgb_script');

function fgb_ayarlari_yap()
{
    add_option('fgb_yer', 'u');
    add_option('fgb_buton', 'snl');
    add_option('fgb_manual', 'hayir');
}
register_activation_hook( __FILE__, 'fgb_ayarlari_yap' );
function fgb_ayarlari_sil()
{
    delete_option('fgb_yer');
    delete_option('fgb_buton');
    delete_option('fgb_manual');
}
register_deactivation_hook( __FILE__, 'fgb_ayarlari_sil' );


function fgb_ekle($content)
{
    $fgb_yer = get_option('fgb_yer'); 
    $fgb_buton_opt = get_option('fgb_buton'); 
    $fgb_manual = get_option('fgb_manual');
    $fgb_perma  = rawurlencode(get_permalink());
    $fgb_send_button = "<fb:send href=\"$fgb_perma\" font=\"\"></fb:send>";
    $fgb_like_button = "<fb:like href=\"$fgb_perma\" send=\"false\" width=\"450\" show_faces=\"true\" font=\"\"></fb:like>";
    $fgb_snl_button = "<fb:like href=\"$fgb_perma\" send=\"true\" width=\"450\" show_faces=\"true\" font=\"\"></fb:like>";
    if($fgb_buton_opt == "send")
    {
        $fgb_buton = $fgb_send_button;
    }
    elseif($fgb_buton_opt == "like")
    {
        $fgb_buton = $fgb_like_button;
    }
    elseif($fgb_buton_opt == "snl")
    {
        $fgb_buton = $fgb_snl_button;
    }
    else
    {
        echo "Buton türü alınamadı!";
    }

    if ($fgb_manual=="hayir"){
        if ($fgb_yer == "u")
        {
            $content = $fgb_buton."<br />".$content;
        }
        elseif ($fgb_yer == "a")
        {
            $content = $content."<br />".$fgb_buton;
        }
        return $content;
    }
    elseif($fgb_manual=="evet"){
        echo $fgb_buton;
    }
}
if (get_option('fgb_manual')=="hayir"){ add_filter( "the_content", "fgb_ekle" ); }

add_action('admin_menu', 'fgb_admin_menu');
function fgb_admin_menu() {
    add_options_page('Facebook Send Button', 'Facebook Send Button', 'manage_options', 'fgb', 'fgb_admin_options');
}
function fgb_admin_options() {
    if (!current_user_can('manage_options'))  {
        wp_die( __('You do not have sufficient permissions to access this page.') );
    }
    echo '<div class="wrap">';
    ?>
    <h2>Facebook Send & Like Button</h2>
    <? 
    if($_POST["fgb_gonder"])
    {
      echo "<h3>saved</h3>";
      update_option('fgb_yer', $_POST["fgb_yer"]);
      update_option('fgb_buton', $_POST["fgb_buton"]);    
      update_option('fgb_manual', $_POST["fgb_manual"]);

        $fgb_admin_yer = get_option('fgb_yer');
        $fgb_admin_buton = get_option('fgb_buton');
        $fgb_admin_manual = get_option('fgb_manual');
    }
    ?>
    <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST">
    Show Facebook buttons <select name="fgb_yer">
        <option value="u" <?php if($fgb_admin_yer == "u"){echo "SELECTED";}?>>before content</option>
        <option value="a" <?php if($fgb_admin_yer == "a"){echo "SELECTED";}?>>after content</option>
    </select> and i want <select name="fgb_buton">
        <option value="snl" <?php if($fgb_admin_buton=="snl"){echo "SELECTED";}?>>send and like buttons together</option>
        <option value="send" <?php if($fgb_admin_buton=="send"){echo "SELECTED";}?>>just send button</option>
        <option value="like" <?php if($fgb_admin_buton=="like"){echo "SELECTED";}?>>just like button</option>
    </select> . <br />
    <input type="radio" value="hayir" name="fgb_manual" <?php if($fgb_admin_manual=="hayir"){echo "CHECKED";}?> /> put buttons for me, AUTOMATICALLY <br />
    <input type="radio" value="evet" name="fgb_manual" <?php if($fgb_admin_manual=="evet"){echo "CHECKED";}?> /> i can put them, MANUALLY <br />

    <input type="submit" class="button-primary" name="fgb_gonder" value="<?php _e('Save Changes') ?>" />
    </form>
    <br />If you use <strong>manuel insertion</strong> , you have to add this code to your theme : 
    <strong>&lt;?php if(function_exists('fgb_ekle')) {   fgb_ekle(); }?&gt;</strong>

    <hr />
    <em>If you like this plugin, please <a href="http://wordpress.org/extend/plugins/facebook-send-like-button/">vote</a> .
    Author : <a href="http://www.teknoblogo.com">Eray Alakese</a>
    You can <a href="mailto:info@teknoblogo.com">mail me</a> for bugs, thanks.</em>

    <?php
    echo '</div>';
}
    
por Bainternet 06.05.2011 / 15:59
-3

Meu problema era que o arquivo foi salvo como um arquivo UTF-8. Salvá-lo com a página de código 1252 resolveu o erro.

    
por Shawn 06.06.2012 / 01:47