web-dev-qa-db-fra.com

WordPress Plugin Development - Message d'en-tête déjà envoyé

Je développe des plugins WordPress. Lorsque j'active mon plugin, je reçois le message suivant:

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

Le plugin fonctionne très bien mais je ne sais pas pourquoi je reçois ce message. Mon plugin est: http://wordpress.org/extend/plugins/facebook-send-like-button/

13
Eray

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 activé E_NOTICE, appeler $_POST['foo'] peut générer l'erreur "Avis: variable indéfinie" si cette variable n'est pas définie.

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

if ( isset( $_POST['foo'] ) ) {
    $foo = (string) $_POST['foo'];
    // apply more sanitizations here if needed
}
9
Geert

Cela est généralement dû à 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 les problèmes d’en-tête déjà envoyés?

UPDATE

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 de fermeture PHP. Sur la dernière ligne, ajoutez ?>

13
Matthew Muro

Au début de votre fonction d'activation, mettez une ob_start(); et à la fin, une 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 générés par une sortie inattendue'. À partir de ce moment-là, le débogage sera plus facile (supprimez les nouveaux caractères de ligne ou résolvez certaines erreurs).

4
lulalala

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

3
yashbinani

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 second argument dans 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.

1
John P Bloch

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 produisez des caractères, alors je crois (ce qui pourrait être faux ici) qu'il existe une déclaration d'en-tête implicite, donc 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: http://php.net/manual/fr/function.header.php

1
anu

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

chaque fois que vous voulez créer cette structure:

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

dans votre code, utilisez la tabulation et pas les 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>';
}
0
Bainternet

Je sais que c'est une vieille question et que sa réponse est acceptée. Beaucoup de réponses couvrent ce que le problème d'activation pourrait pourrait être. Cependant, aucune des réponses n'aborde vraiment le problème fondamental deCOMMENTpour résoudre les problèmes liés à l'activation du plug-in.

Si vous envisagez de développer des plugins WP, vous pouvez également utiliser les outils appropriés. Un de ceux-ci est le Debug Bar . Ceci est un plugin qui vous aide à résoudre les problèmes dans WP. Si vous êtes un développeur de plugins, il devrait être dans votre boîte à outils.

La barre de débogage contient un certain nombre d’add-ons - plugins pour le plugin, si vous voulez. L’un de ceux-ci est Activation du plugin de la barre de débogage , qui vous montrera l’erreur PHP générée lors de l’activation du plugin. Une fois que vous savez quelle est l’erreur PHP qui entraîne l’envoi des en-têtes, vous savez alors où vous devez chercher pour la corriger. Croyez-moi, sachant quelle est l’erreur est peut vous faire économiser beaucoup de temps au lieu d’essayer de déterminer quelle erreur pourrait être .

0
butlerblog