wake-up-neo.com

WordPress Plugin Entwicklung - Header bereits gesendete Nachricht

Ich entwickle WordPress-Plugins. Wenn ich mein Plugin aktiviere, erhalte ich die folgende Meldung:

Das Plugin hat während der Aktivierung 293 Zeichen unerwartete Ausgabe generiert. Wenn Sie bereits gesendete Header-Nachrichten, Probleme mit Syndication-Feeds oder andere Probleme bemerken, deaktivieren oder entfernen Sie dieses Plugin.

Das Plugin funktioniert sehr gut, aber ich weiß nicht, warum ich diese Nachricht erhalte. Mein Plugin ist: http://wordpress.org/extend/plugins/facebook-send-like-button/

13
Eray

Ich vermute, Sie bekommen einen PHP -Fehler, der die Ausgabe erzeugt, bevor die Header gesendet werden. Wenn Sie E_NOTICE aktiviert haben, wird beim Aufrufen von $_POST['foo'] möglicherweise der Fehler "Hinweis: undefinierte Variable" ausgegeben, wenn diese Variable nicht festgelegt ist.

Best Practice: Nehmen Sie niemals etwas über GET-, POST-, COOKIE- und REQUEST-Variablen an. Überprüfen Sie immer zuerst mit isset() oder empty().

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

Dies wird normalerweise durch Leerzeichen oder neue Zeilen vor dem <?php-Tag oder nach dem ?>-Tag verursacht.

Auf dieser Seite finden Sie einige Lösungen: Wie löse ich das Problem mit bereits gesendeten Headern?

UPDATE

Nach der Überprüfung Ihres Plugin-Codes ist mir aufgefallen, dass Sie kein schließendes PHP -Tag haben. Fügen Sie in der letzten Zeile ?> hinzu

13
Matthew Muro

Am Anfang Ihrer Aktivierungsfunktion setzen Sie eine ob_start(); und am Ende eine trigger_error(ob_get_contents(),E_USER_ERROR);

Versuchen Sie dann, Ihr Plugin zu aktivieren, und Sie können sehen, was die ' generierten 293 Zeichen unerwarteter Ausgabe ' wirklich sind. Ab diesem Zeitpunkt ist das Debuggen einfacher (entweder entfernen Sie neue Zeilenzeichen oder beheben Sie einige Fehler).

4
lulalala

Ich habe das gleiche Problem schon einmal gehabt, für mich war es ein zusätzlicher weißer Raum. Nachdem ich alle diese Leerzeichen entfernt hatte, konnte das Plugin ohne Fehler/Warnung aktiviert werden.

3
yashbinani

Ich bin mir nicht sicher, ob das das Problem ist, aber ich bin mir ziemlich sicher.

Sie müssen einen gültigen Rückruf als zweites Argument in register_activation_hook() verwenden:

register_activation_hook(__FILE__,'twl_tablo_olustur');

Soweit ich das beurteilen kann, haben Sie twl_tablo_olustur() nirgends definiert. Dies würde sicherlich die unerwartete Ausgabe erklären (PHP-Fehler beim Versuch, eine nicht vorhandene Funktion aufzurufen) und erklären, warum sie unter allen anderen Umständen einwandfrei funktioniert.

1
John P Bloch

Ich neige dazu, diese Meldungen häufig zu erhalten, wenn ich Plugin/Theme-Debug-Meldungen ausgebe, insbesondere, wenn ich Dinge ausgebe, bevor wp_header aufgerufen wird.

Wenn Sie irgendwelche Zeichen ausgeben, dann glaube ich (könnte hier falsch sein), dass es eine implizite Header-Deklaration gibt. Wenn also der normale Header () -Aufruf auftritt, erhalten Sie den Fehler, da Sie keine 2 Header-Deklarationen haben können.

Sie können ob_start () verwenden, um die Ausgabe zu puffern. Dies sollte den Fehler beheben. Beachten Sie die Kommentare hier: http://php.net/manual/en/function.header.php

1
anu

Bei der letzten Überarbeitung des Plugins (381724) ist das Problem Zu viele Leerzeichen

jedes Mal, wenn Sie diese Struktur erstellen möchten:

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

verwenden Sie in Ihrem Code TAB und keine Leerzeichen.

Hier ist Ihr Code, in dem ich alle Leerzeichen durch Tabulatoren ersetzt habe und bei der Aktivierung keine Nachrichten erhalte:

<?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

Ich weiß, dass dies eine alte Frage ist und eine akzeptierte Antwort hat. Es gibt viele Antworten, die das Aktivierungsproblem könnte beschreiben. Bei der Kernausgabe von HOW zum Debuggen von Problemen mit der Plugin-Aktivierung wird jedoch keine der Antworten angezeigt.

Wenn Sie WP Plugins entwickeln, können Sie auch die richtigen Tools für den Job verwenden. Eine davon ist die Debug Bar . Dies ist ein Plugin, das Sie beim Debuggen von Problemen in WP unterstützt. Wenn Sie ein Plugin-Entwickler sind, sollte es in Ihrer Toolbox sein.

Die Debug-Leiste enthält eine Reihe von Add-Ons - Plugins für das Plugin, wenn Sie so wollen. Eine davon ist Debug Bar Plugin Activation , die den PHP -Fehler anzeigt, der beim Aktivieren des Plugins generiert wird. Sobald Sie wissen, was der Fehler PHP ist, der das Senden der Header verursacht, wissen Sie, wo Sie nachsehen müssen, um dies zu korrigieren. Vertrauen Sie mir, wissen, was der Fehler ist kann Ihnen eine Menge Zeit sparen, anstatt zu versuchen, herauszufinden, was der Fehler sein könnte.

0
butlerblog