वर्डप्रेस प्लगइन विकास - हेडर पहले से ही भेजे गए संदेश


15

मैं वर्डप्रेस प्लगइन्स विकसित कर रहा हूं। जब मैं अपना प्लगइन सक्रिय करता हूं, तो मुझे निम्न संदेश मिल रहा है:

सक्रियण के दौरान प्लगइन ने अप्रत्याशित आउटपुट के 293 वर्णों को उत्पन्न किया। यदि आप "हेडर पहले से ही भेजे गए" संदेशों को देखते हैं, तो सिंडिकेशन फ़ीड या अन्य समस्याओं के साथ समस्याएँ, इस प्लगइन को निष्क्रिय करने या हटाने का प्रयास करें।

प्लगइन बहुत अच्छा काम कर रहा है, लेकिन मुझे नहीं पता कि मुझे यह संदेश क्यों मिल रहा है। मेरा प्लगइन है: http://wordpress.org/extend/plugins/facebook-send-like-button/


यदि डीबगिंग सक्षम है, तो आपको यह मिल सकता है यदि php ने एक चेतावनी आउटपुट की है।
मिलो

1
जांचें कि क्या आपने अपने प्लगइन php फाइलों के अंत में php क्लोज टैग के बाद कोई सफेद स्थान छोड़ा है।
सिसिर

1
आप एक डिबगर का उपयोग कर रहे हैं, तो के लिहाज से एक ब्रेकपाइंट डाल activate_plugin methodमें wordpress/wp-admin/includes/plugin.php। $ आउटपुट चर की सामग्री आपको अपवाद में लोड किए गए डेटा को हमेशा फेंकने के लिए दिखाएगी, और फिर वर्डप्रेस द्वारा obfuscated किया जाएगा।
टॉड होल्म्बर्ग

जवाबों:


10

मेरा अनुमान है कि आपको PHP त्रुटि मिलती है, जो हेडर भेजे जाने से पहले आउटपुट उत्पन्न करती है। यदि आपने E_NOTICEसक्षम किया है, तो कॉलिंग $_POST['foo']एक "नोटिस: अपरिभाषित चर" त्रुटि उत्पन्न कर सकती है यदि वह चर सेट नहीं है।

सर्वोत्तम अभ्यास: GET, POST, COOKIE और REQUEST चर के बारे में कभी भी कुछ भी न मानें। हमेशा पहले का उपयोग कर की जाँच करें isset()या empty()

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

13

यह आमतौर पर उद्घाटन <?phpटैग से पहले या समापन ?>टैग के बाद रिक्त स्थान या नई लाइनों के कारण होता है ।

कुछ समाधान देखने के लिए इस पृष्ठ को देखें: मैं पहले से ही चेतावनी समस्या भेजे गए हेडर को कैसे हल करूं?

अपडेट करें

आपके प्लगइन कोड की जांच करने के बाद, एक बात जो मैंने देखी है कि आपके पास एक समापन PHP टैग नहीं है। अंतिम पंक्ति पर, जोड़ें?>


4
PHP फ़ाइलों को समापन ?>टैग की आवश्यकता नहीं है । वास्तव में, यह गारंटी देने का एक तरीका है कि यह Headers already sentमुद्दों का कारण नहीं होगा , समापन टैग को छोड़ना है।
जॉन पी बलोच

2
यह मेरा मुद्दा था। मेरे पास बंद होने के बाद खाली लाइनों का एक गुच्छा था ?>
कैम जैक्सन

1
समापन PHP टैग का उपयोग करने की अनुशंसा न करें। यह एक बुरा अभ्यास है जो ओपी में समस्याओं के प्रकार की ओर जाता है, और यह WP कोर कोडिंग मानकों के विपरीत जाता है (देखें make.wordpress.org/core/handbook/best-practices/… )
बटलरब्लॉग

4

अपने सक्रियण समारोह की शुरुआत में एक डाल दिया ob_start(); और अंत में एक डाल दियाtrigger_error(ob_get_contents(),E_USER_ERROR);

फिर अपने प्लगइन को सक्रिय करने का प्रयास करें, और फिर आप देख सकते हैं कि ' अनपेक्षित आउटपुट के 293 वर्ण ' वास्तव में क्या हैं। तब से डिबगिंग पर यह आसान हो जाएगा (या तो नई लाइन वर्णों को हटा दें या कुछ त्रुटियों को हल करें)।


यह वास्तव में त्रुटि को ठीक करने का एक जीनियस समाधान है .. धन्यवाद ..
ओबेरम क्रोनन

3

मैंने पहले भी इसी समस्या का सामना किया है, मेरे लिए यह अतिरिक्त सफेद स्थान था। के बाद मैं उन सभी सफेद रिक्त स्थान को हटा दिया प्लगइन किसी भी त्रुटि / चेतावनी के बिना सक्रिय कर सकता है।


1

मैं सकारात्मक नहीं हूँ यह समस्या है, लेकिन मुझे इसका पूरा यकीन है।

आपको दूसरे तर्क के रूप में मान्य कॉलबैक का उपयोग करने की आवश्यकता है register_activation_hook():

register_activation_hook(__FILE__,'twl_tablo_olustur');

जहाँ तक मैं बता सकता हूँ, आपने twl_tablo_olustur()कहीं भी परिभाषित नहीं किया है। यह निश्चित रूप से अप्रत्याशित उत्पादन (गैर-मौजूद फ़ंक्शन को कॉल करने की कोशिश से उत्पन्न PHP त्रुटि) की व्याख्या करेगा, और यह बताएगा कि यह अन्य सभी परिस्थितियों में ठीक काम क्यों करता है।


धन्यवाद। लेकिन register_activation_hook(__FILE__,'twl_tablo_olustur');पुराने संस्करण से यह कोड। नए संस्करण में (आप देख सकते हैं, v1.3) यह अपडेट किया गया है, लेकिन अभी भी वही त्रुटि है।
इरे

1

जब मैं प्लगइन / थीम डिबग संदेश का उत्पादन कर रहा होता हूं, तो मुझे ये संदेश बहुत मिलते हैं, खासकर जब मैं wp_header फोन करने से पहले सामान का उत्पादन कर रहा हूं।

यदि आप किसी भी वर्ण को आउटपुट कर रहे हैं, तो मेरा मानना ​​है कि (यहां गलत हो सकता है) कि एक अंतर्निहित हेडर घोषणा है, इसलिए जब सामान्य हेडर () कॉल होता है, तो आपको त्रुटि मिलती है क्योंकि आपके पास 2 हेडर घोषणाएं नहीं हो सकती हैं।

आप आउटपुट को बफर करने के लिए ob_start () का उपयोग कर सकते हैं, जो त्रुटि को दूर करना चाहिए - यहां टिप्पणियों पर एक नज़र डालें: http://php.net/manual/en/function.header.php


1

मुझे पता है कि यह एक पुराना प्रश्न है और इसका एक स्वीकृत उत्तर है। ऐसे कई उत्तर हैं जो सक्रियण समस्या को संभावित रूप से कवर कर सकते हैं। हालाँकि, कोई भी उत्तर वास्तव में HOW के मुख्य मुद्दे पर नहीं मिलता है प्लगइन सक्रियण के साथ मुद्दों को डीबग करने के लिए।

यदि आप WP प्लगइन्स विकसित करने जा रहे हैं, तो आप नौकरी के लिए सही टूल का उपयोग कर सकते हैं। उनमें से एक डिबग बार है । यह एक प्लगइन है जो आपको WP में मुद्दों को डीबग करने में मदद करता है। यदि आप एक प्लगइन डेवलपर हैं, तो यह आपके टूलबॉक्स में होना चाहिए।

डीबग बार में कई ऐड-ऑन - प्लग इन प्लगइन होते हैं, यदि आप करेंगे। उनमें से एक डिबग बार प्लगिन सक्रियण है , जो प्लगइन सक्रिय होने पर आपको उत्पन्न PHP त्रुटि दिखाएगा। एक बार जब आप जान जाते हैं कि PHP की त्रुटि क्या है जिसके कारण हेडर भेजे जाते हैं, तो आप जानते हैं कि आपको इसे सही करने के लिए कहाँ देखना होगा। मुझ पर विश्वास करो, जानते हुए भी क्या त्रुटि है आप के बजाय करने की कोशिश कर के समय की बचत हो सकती है यह पता लगाने की क्या त्रुटि हो सकता है


धन्यवाद, यह बहुत मददगार है!
user1190132

0

प्लगइन के अंतिम संशोधन (381724) को देखते हुए समस्या बहुत अधिक स्थान है

हर बार जब आप इस संरचना को बनाना चाहते हैं:

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

अपने कोड में TAB का उपयोग करें और रिक्त स्थान का नहीं।

यहां वह कोड है जहां मैंने सभी स्थानों को टैब से बदल दिया है और मुझे सक्रियण पर कोई संदेश नहीं मिलता है:

<?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>';
}

2
इससे कोई लेना-देना नहीं होना चाहिए। आपके फ़ंक्शंस के अंदर रिक्तियाँ और टैब स्वीकार्य हैं और यह त्रुटि उत्पन्न नहीं करता है।
मैथ्यू मुरो

किसी फ़ंक्शन के अंदर आप सही हैं, लेकिन यदि फ़ंक्शन सीधे कुछ उदाहरण के लिए आउटपुट करता है: function blabla(){?> <input> <?php code... ?> output something <?php code.. }तो यह मामला नहीं है।
बेनटर्नट

2
@MatthewMuro: यदि आप किसी फ़ंक्शन के अंदर जगह छोड़ते हैं तो ओके लेकिन अगर आप php क्लोजिंग टैग्स के बाद किसी भी व्हाइट स्पेस / लाइन ब्रेक को छोड़ देते हैं ?>तो आपको मिल जाएगा header already send errorक्योंकि php इंजन के पार्स होने पर वे अतिरिक्त व्हाइट स्पेस प्रिंट हो जाएंगे।
सिसिर

0

आप हर फाइल के अंत से php क्लोज टैग (?>) को हटाते हैं। और php क्लोज टैग (?) के बाद सभी रिक्त स्थान को भी हटा दें

जब आप प्लगइन को सक्रिय करते हैं तो जांच लें कि टेबल पहले से मौजूद है या नहीं।

मैंने कोड द्वारा समस्या को हटा दिया

    if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

        $sql = "CREATE TABLE {$table_name}(
            id INT NOT NULL AUTO_INCREMENT,
            name VARCHAR(250),
            email VARCHAR(250),
            PRIMARY KEY (id)
        );";
        dbDelta($sql);
    }

-3

मेरा मुद्दा यह था कि फ़ाइल को UTF-8 फ़ाइल के रूप में सहेजा गया था। कोडपेज 1252 के साथ इसे सहेजने से त्रुटि हल हो गई।


1
क्षमा करें, यह गलत है। WordPress में सब कुछ UTF-8 एनकोडेड है, Windows-1252 उस साइट को तोड़ देगा जब आप गैर-ASCII वर्ण का उपयोग करते हैं।
FUXIA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.