该插件在激活期间生成了xxx个字符的意外输出[重复]

Posted

技术标签:

【中文标题】该插件在激活期间生成了xxx个字符的意外输出[重复]【英文标题】:The plugin generated xxx characters of unexpected output during activation [duplicate] 【发布时间】:2011-12-05 06:04:04 【问题描述】:

我正在创建 WordPress 插件来显示总 Twitter 计数器和订阅者。您可以通过小部件对其进行管理。

我收到此错误。

插件在激活期间生成了 123 个字符的意外输出。如果您发现“标头已发送”消息、联合供稿问题或其他问题,请尝试停用或删除此插件。

<?php
/*
 * Plugin Name: Twitter & RSS Stats
 * Version: 1.0
 * Plugin URI: http://sss.com/
 * Description: Facebook, Twitter & RSS Social Stats widget <a href="http://jessealtman.com/2009/06/08/tutorial-wordpress-28-widget-api/">tutorial</a>.
 * Author: Ajay Patel
 * Author URI: http://sss.com/
 */

addHeaderCode();
 function addHeaderCode() 

            echo '<link type="text/css" rel="stylesheet" href="' . get_bloginfo('wpurl') . '/wp-content/plugins/TRR_Stats/css/style.css" />' . "\n";    
            


 /*******************************/
 /*     Create table            */
 /********************************/
function my_plugin_create_table()

        // do NOT forget this global
    global $wpdb;

    // this if statement makes sure that the table doe not exist already
    if($wpdb->get_var("show tables like TRR_Stats") != 'TRR_Stats') 
    
        $sql = "CREATE TABLE TRR_Stats (
        id mediumint(9) NOT NULL,
        rss_email tinytext NOT NULL,
        twitter tinytext NOT NULL,
        rss tinytext NOT NULL,
        UNIQUE KEY id (id)
        );";
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    

// this hook will cause our creation function to run when the plugin is activated
register_activation_hook( __FILE__, 'my_plugin_create_table' );


class FTRWidget extends WP_Widget

    /**
    * Declares the FTRWidget class.
    *
    */
    function FTRWidget()
        $widget_ops = array('classname' => 'widget_hello_world', 'description' => __( "Example widget demoing WordPress 2.8 widget API") );
        $control_ops = array('width' => 300, 'height' => 300);
        $this->WP_Widget('helloworld', __('Twitter & RSS Social Stats'), $widget_ops, $control_ops);
    

    /**
    * Displays the Widget
    *
    */
    function widget($args, $instance)
        extract($args);
        $rss_email = empty($instance['rss_email']) ? 'webdesignergeeks' : $instance['rss_email'];
        $twitter = empty($instance['twitter']) ? 'webdesignergeek' : $instance['twitter'];
        $rss = empty($instance['rss']) ? 'webdesignergeeks' : $instance['rss'];


        # Featch Data from table
        global $wpdb;
        $item_info = $wpdb->get_row("SELECT * FROM TRR_Stats WHERE id=1;");
        $rss_email_f = $item_info->rss_email;

        $url = file_get_contents('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=24thfloor');
        preg_match( '/circulation="(\d+)"/', $url, $matches );
        if ( $matches[1] )
        $rss_f = $matches[1] . " Subscribers";
        else
        echo "0";

        $twit = file_get_contents('http://twitter.com/users/show/'.$twitter.'.xml');
        preg_match( '/\<followers_count\>(\d+)\<\/followers_count\>/', $twit, $matches );
        if ( $matches[1] )
        $twitter_f = $matches[1] . " Followers";
        else
        $twitter_f = "0";



        echo '
            <div class="sidebarContainer" id="sidebarSubscribe">

            <a target="_blank" href="http://twitter.com/'.$twitter.'" class="subscribeSidebarBox" id="followTwitter">
                <span class="icon"><img src="'.get_bloginfo('url').'/wp-content/plugins/TRR_Stats/img/twitter.png"  /></span>
                <span class="title">Follow Us on Twitter</span>
                <span class="count">'.$twitter_f.'+</span>
            </a>

            <a target="_blank" href="http://feeds.feedburner.com/'.$rss.'" class="subscribeSidebarBox" id="subscribeRSS">
                <span class="icon"><img src="'.get_bloginfo('url').'/wp-content/plugins/TRR_Stats/img/rss_feed.png" /></span>
                <span class="title">Subscribe to our RSS feed</span>
                <span class="count">'.$rss_f.'+</span>
            </a>

            <a target="_blank" href="http://feedburner.google.com/fb/a/mailverify?uri='.$rss_email_f.'" class="subscribeSidebarBox" id="subscribeEmail">
                <span class="icon"><img src="'.get_bloginfo('url').'/wp-content/plugins/TRR_Stats/img/rss_email.png"  /></span>

                <span class="title">Subscribe for updates via</span>
                <span class="count">EMAIL</span>
            </a>
        </div>';

        # After the widget
        echo $after_widget;
    


    /**
    * Saves the widgets settings.
    *
    */
    function update($new_instance, $old_instance)
        $instance = $old_instance;
        $instance['rss_email'] = strip_tags(stripslashes($new_instance['rss_email']));
        $instance['twitter'] = strip_tags(stripslashes($new_instance['twitter']));
        $instance['rss'] = strip_tags(stripslashes($new_instance['rss']));

        global $wpdb;
            //Insert First time
            $wpdb->insert( 'TRR_Stats', array(
            'id'    => 1,
            'rss_email' => $instance['rss_email'], 
            'twitter' => $instance['twitter'],
            'rss' => $instance['rss']
            ) 
        );

        //Rest Update Data
        global $wpdb;
            $wpdb->update( 'TRR_Stats', 
            array( 
                'rss_email' => $instance['rss_email'], 
                'twitter' => $instance['twitter'],
                'rss' => $instance['rss']
            ),
            array(
                'id' => 1
            )

        );

        return $instance;
    

    /**
    * Creates the edit form for the widget.
    *
    */
    function form($instance)
        //Defaults
        $instance = wp_parse_args( (array) $instance, array('rss_email'=>'', 'twitter'=>'engiguide', 'rss'=>'www.rss_email.com/engiguide') );

        $rss_email = htmlspecialchars($instance['rss_email']);
        $twitter = htmlspecialchars($instance['twitter']);
        $rss = htmlspecialchars($instance['rss']);

        # Output the options

        # Twitter
        echo '<p style="text-align:right;"><label for="' . $this->get_field_name('twitter') . '">' . ('Twitter:') . ' <input style="width: 200px;" id="' . $this->get_field_id('twitter') . '" name="' . $this->get_field_name('twitter') . '" type="text" value="' . $twitter . '" /></label></p>';
        echo '<p style="padding-left: 110;">i.e: webdesignergeeks</p>';
        # Rss
        echo '<p style="text-align:right;"><label for="' . $this->get_field_name('rss') . '">' . __('Rss:') . ' <input style="width: 200px;" id="' . $this->get_field_id('rss') . '" name="' . $this->get_field_name('rss') . '" type="text" value="' . $rss . '" /></label></p>';
        echo '<p style="padding-left: 110;">i.e: webdesignergeeks</p>';
        # Rss Email
        echo '<p style="text-align:right;"><label for="' . $this->get_field_name('rss_email') . '">' . ('Rss Email:') . ' <input style="width: 200px;" id="' . $this->get_field_id('rss_email') . '" name="' . $this->get_field_name('rss_email') . '" type="text" value="' . $rss_email . '" /></label></p>';
        echo '<p style="padding-left: 110;">i.e: webdesignergeeks</p>';

    

// END class

    /**
    * 
    * Calls 'widgets_init' action after the Hello World widget has been registered.
    */
    function TTRInit() 
    register_widget('FTRWidget');
       
    add_action('widgets_init', 'TTRInit');
?>

【问题讨论】:

我终于推出了这个插件链接:wordpress.org/extend/plugins/twitter-rss-social-stats 禁用错误报告,即define('WP_DEBUG', false); @ManikThakur 这通常不是一个好主意。建议您在完成插件开发之前解决所有错误和警告。 有时会发生这种情况,因为您的插件文件中有非 php 代码。换句话说,你不应该直接echo 任何东西,你的&lt;php? 标签应该从头开始,?&gt; 在最后结束。我的 2 个字符意外输入只是因为 &lt;php? 之前的新行@ 【参考方案1】:

在最后一个 php 结束标记之后,我得到了额外的“xxx”空格。删除它,警告消失了。那些空白是“意外的输出”。

【讨论】:

哇!非常感谢。成功了! 这是我的正确答案。从插件中的每个 PHP 文件中删除像 ?&gt; 这样的 php 结束标记后的任何空格或行。 这个答案只适用,哈哈...【参考方案2】:

删除标签开头的空格。删除 addHeaderCode();从顶部添加此代码 add_action('wp_head', 'addHeaderCode');在 addHeaderCode() 函数之后添加到您的文件中。它绝对可以解决您的问题。

【讨论】:

【参考方案3】:

这是一个 UTF8 相关问题。我在 UTF8 中使用 Notepad++ 对其进行了转换,但我必须将其转换为“UTF8(无 BOM)”。 现在我没有任何通知。

【讨论】:

【参考方案4】:

我认为您不应该在addHeaderCode() 中发送任何输出,这发生得太早了。见Actions Run During a Typical Request。

相反,尝试连接到wp_head 以添加您的样式表,这应该在&lt;head&gt;...&lt;/head&gt; 之间触发。

【讨论】:

我已经解决了 70% 的问题是空间和 cmets 让它有问题,现在我很高兴在这个插件中包含 css 问题是您在页面其余部分之前将输出发送到浏览器 - 使用 add_action('wp_head', 'addHeaderCode'); 在适当的位置添加样式表引用; fin 感谢 css 帮助现在 apptox all r 解决了,非常感谢 不用担心 =) 还值得记住的是,如果您在 【参考方案5】:

你应该试试这个:

    删除空格 运行函数plugin_error()wp_config.php 文件集 wp_DEBUG true 中,这将帮助您查看错误

这可能会对你有所帮助。

【讨论】:

我对你的答案投了反对票,因为你引用了无处引用的 plugin_error() 函数。【参考方案6】:

尝试用__() 包装消息,就像__("Hello, world!") 对我有用。

【讨论】:

__()_e() 函数只处理翻译。【参考方案7】:

您可以在没有此功能的情况下删除 update() 功能,它会正常工作,并且会做与您正在做的事情相同的事情。

【讨论】:

【参考方案8】:

我在使用 WooCommerce 智能优惠券插件时遇到了同样的问题。我从插件 php 文件中删除了所有额外的新行,并将它们保存在“UTF8(无 BOM)”中(正如@Umaie Hamid 提到的那样)。这解决了问题。

【讨论】:

【参考方案9】:

我已通过使用 WP 管理员中的“编辑插件”删除代码中的空格来解决此问题。我认为当 WP 保存更改时,它还会进行所有必要的设置,例如将文件保存为 UTF-8。

【讨论】:

【参考方案10】:

我遇到了同样的错误,只是删除了代码中的空白。

【讨论】:

以上是关于该插件在激活期间生成了xxx个字符的意外输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 239 字符意外输出错误

我无法在 localhost 上激活我的 WordPress 插件

005-做题:使用 Python 生成 200 个激活码

if语句C ++期间意外中断

无法激活插件,因为它触发了致命错误:意外的“require_once”

随机生成1个字符随机次数[重复]