Développement de plug-in Wordpress - Message d'en-tête déjà envoyé

11

Je développe des plugins Wordpress. Quand j'active mon plugin, je reçois un message

  

Le plugin a généré 293 caractères de   sortie inattendue lors de l'activation.   Si vous remarquez que les "en-têtes ont déjà été envoyés"   messages, problèmes de syndication   flux ou autres problèmes, essayez   désactiver ou supprimer ce plugin.

Le plugin fonctionne très bien mais je ne sais pas pourquoi je reçois ce message. Mon plugin est: enlace

    
posée Eray 06.05.2011 - 15:23

8 réponses

8

Je suppose que vous obtenez une erreur PHP, qui génère une sortie avant que les en-têtes ne soient envoyés. Si vous avez E_NOTICE activé, l'appel de $_POST['foo'] peut générer une erreur "Remarque: variable non définie" si cette variable n'est pas définie.

Meilleure pratique: ne supposez jamais rien des variables GET, POST, COOKIE et REQUEST. Toujours vérifier d'abord avec isset() ou empty() .

if ( isset( $_POST['foo'] ) ) {
    $foo = (string) $_POST['foo'];
    // apply more sanitizations here if needed
}
    
réponse donnée Geert 06.05.2011 - 16:17
13

Cela est généralement causé par des espaces ou de nouvelles lignes avant la balise <?php d'ouverture ou après la balise ?> de fermeture.

Consultez cette page pour voir quelques solutions: Comment résoudre le problème d'avertissement déjà envoyé par les en-têtes?

MISE À JOUR

Après avoir examiné votre code de plugin, la seule chose que j'ai remarquée, c'est que vous n'avez pas de balise PHP de fermeture. Sur la dernière ligne, ajoutez ?>

    
réponse donnée Matthew Muro 06.05.2011 - 15:40
4

Au début de votre fonction d'activation, insérez un ob_start(); et à la fin, insérez un trigger_error(ob_get_contents(),E_USER_ERROR);

Ensuite, essayez d'activer votre plugin et vous pourrez alors voir ce que sont réellement les ' 293 caractères d'une sortie inattendue '. À partir de là, le débogage sera plus facile (supprimez les nouveaux caractères de ligne ou résolvez certaines erreurs).

    
réponse donnée lulalala 26.09.2011 - 09:54
3

J’ai déjà fait face au même problème, c’était pour moi un espace supplémentaire. Après avoir supprimé tous ces espaces, le plug-in pourrait être activé sans erreur ni avertissement.

    
réponse donnée yashbinani 25.12.2011 - 13:01
1

Je ne suis pas sûr que ce soit le problème, mais j'en suis assez sûr.

Vous devez utiliser un rappel valide comme deuxième argument de register_activation_hook() :

register_activation_hook(__FILE__,'twl_tablo_olustur');

Autant que je sache, vous n'avez défini twl_tablo_olustur() nulle part. Cela expliquerait certainement le résultat inattendu (erreur PHP générée en essayant d’appeler une fonction inexistante), et expliquerait pourquoi cela fonctionne bien dans toutes les autres circonstances.

    
réponse donnée John P Bloch 06.05.2011 - 16:18
1

J'ai tendance à beaucoup recevoir ces messages lorsque je produis des messages de débogage de plug-in / thème, en particulier lorsque je produis des choses avant que wp_header ne soit appelé.

Si vous affichez des caractères, alors je crois (cela pourrait être faux ici) qu'il existe une déclaration d'en-tête implicite. Ainsi, lorsque l'appel normal header () se produit, vous obtenez l'erreur car vous ne pouvez pas avoir 2 déclarations d'en-tête. .

Vous pouvez utiliser ob_start () pour mettre en tampon la sortie, ce qui devrait supprimer l’erreur. Regardez les commentaires ici: enlace

    
réponse donnée anu 06.05.2011 - 16:58
0

En regardant la dernière révision du plugin (381724), le problème est Trop d'espaces

.

chaque fois que vous souhaitez créer cette structure:

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

dans votre code, utilisez la tabulation et non des espaces.

Voici votre code où j'ai remplacé tous les espaces par des tabulations et je ne reçois aucun message lors de l'activation:

<?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:[email protected]">mail me</a> for bugs, thanks.</em>

    <?php
    echo '</div>';
}
    
réponse donnée Bainternet 06.05.2011 - 15:59
-3

Mon problème était que le fichier avait été enregistré en tant que fichier UTF-8. L'enregistrer avec Codepage 1252 a résolu l'erreur.

    
réponse donnée Shawn 06.06.2012 - 01:47

Lire d'autres questions sur les étiquettes