The plugin generated X characters of unexpected ou

2018-12-31 14:00发布

问题:

I\'m getting this message each time I activate my plugin:

The plugin generated 80 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.

The only way I was able to suppress the message was to wrap my activation function code within an if statement (please refer to snippets below).

Here, a snippet of my plugin code when I get the error described above:

function myPlugin( $post ) {
    echo \"Whatever is here throws an unexpected output alert when the plugin isa activated\";
}
register_activation_hook( __FILE__, \'myPlugin\' );

Following, my wrapping the function in my plugin within an if statement; it suppresses the previous error as discussed above:

function myPlugin( $post ) {
    global $pagenow;
    if ( is_admin() && $pagenow !== \'plugins.php\' ) {
        echo \"No more alerts when its wrapped this way\";
        }
    }
}
register_activation_hook( __FILE__, \'myPlugin\' );

What actually cause that error and how can I effectively complete my plugin with my logics without having to encounter it?

Is there any better way to handle this?

回答1:

I think there may be two issues here that are causing the problem. First is that I don\'t think wordpress expects any output when the plugin activation hook is called so it may be complaining about that. Second is that plugin activation hooks are called fairly early in the wordpress program flow, so, it\'s probably being called before headers are sent. If ANY output is generated before calling header() then PHP usually complains.

Usually the plugin activation routine is reserved for basic setup of the plugin, calls to things like set_option() and the like.



回答2:

2 probably reasons:

1) You are doing an output (like echo or etc) in wrong place.

  • Do you want to output a message in admin dashboard? - use admin_notices hook and output there...
  • Do you want to output a message in front-end? - find appropriate places with hooks (like the_content or wp_footer or whatever).

  • Don\'t output anything either in register_activation_hook or outside of WordPress standard hooks, no-one should do that.**

2) if you aren\'t doing any output intentionally, then maybe some php error happens? If so, put this code temporarily in functions.php and then activate the plugin - you will see the error.

define(\'temp_file\', ABSPATH.\'/_temp_out.txt\' );

add_action(\"activated_plugin\", \"activation_handler1\");
function activation_handler1(){
    $cont = ob_get_contents();
    if(!empty($cont)) file_put_contents(temp_file, $cont );
}

add_action( \"pre_current_active_plugins\", \"pre_output1\" );
function pre_output1($action){
    if(is_admin() && file_exists(temp_file))
    {
        $cont= file_get_contents(temp_file);
        if(!empty($cont))
        {
            echo \'<div class=\"error\"> Error Message:\' . $cont . \'</div>\';
            @unlink(temp_file);
        }
    }
}


回答3:

Had the same error, but only with 6 characters ) so... in my case I had empty lines after PHP closing tag ?> - that will cause this error too.



回答4:

I had the same error - 3 characters of unexpected output and was lead here. For people in my scenario another cause of this message can be the file type being encoded as UTF with BOM.

BOM encoding was causing the error, and while the plug-in activated it would render incorrectly in internet explorer because of this.

The solution is to use Notepad++ and choose \'Convert to UTF without BOM\', or if you are using visual studio, there is an explanation of how to change encoding UTF-8 without BOM



回答5:

I battled this problem for a long time. Typically this is caused by spaces or new lines before the opening <?php tag or after the closing ?> tag. Once I removed these, the error went away.

Also, never assume anything about GET, POST, COOKIE and REQUEST variables. Always check first using isset() or empty().



回答6:

In my case it was due to Undefined index, Just enable the debug log to check whats causing it, then you can resolve it easily.

For those who don\'t know how to enable the Debug log, Add these lines in your wp-config.php:

    define( \'WP_DEBUG\', true );
    define( \'WP_DEBUG_DISPLAY\', true );
    define( \'WP_DEBUG_LOG\', true );

You can see the errors properly in the debug file created in wp-content



回答7:

This problem can be solved by removing extra whitespaces. I solved this problem for my code. You can remove extra whitespaces easily in Adove Dreamweaver.

First, goto edit->Find and Replace. Or press Ctrl+F. Check \"Use Regular Expression\" button from \"option\" section.

Fill \"find\" field with the below code

[\\r\\n]{2,}

Fill \"Replace\" field with the below code

\\n

Now click on \"Replace All\" button. Hope It will work.



回答8:

I was having the same issue, i tried to remove the code and did everything but still the same problem

the real solution for me was the following.

  1. at the end of the file which contains the header of the plugin i removed closing php ?> and the problem will be solved
  2. at the end of the plugin file which contains the header of the plugin remove the extra line breaks after the closing php ?>

my plugin file ended at line 69 and there were 7 more spaced after the last php code so in the editor the file was up to 66, my error was \"The plugin generated 7 characters of unexpected....\" when i removed extra lines up to 69 the was error gone,

Thanks



回答9:

sometime it is because you use <?php ;?> unnecessary or use it like shown below

;?>

<?php

this extra line between closing and starting tag may also cause this error, simple remove that line/space



回答10:

i also got this problem when i activate my plugin

The plugin generated 1 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.

Typically this is caused by spaces or new lines before the opening tag. Once I removed these, the error went away.

now my plugin error gone.



回答11:

A common way to assign the register_activation_hook is using a static method of a class. This ensures that your plugin activation function name won\'t collide with other plugins.

class Foo_Plugin 
{
    public static function plugin_activation() {
        // activation logic
    }
}

This function needs to be public and not private. A mistake is easily made though, so this could be a reason for your problems when getting this kind of error.

You would then register the activation with this code in the main plugin file.

register_activation_hook( __FILE__, array( \'Foo_Plugin\', \'plugin_activation\' ) );


回答12:

The error message The plugin generated *X* characters of unexpected output during activation is not very helpful or at least not quite enough.

To help locate the issue, add these to wp-config.php:

define( \'WP_DEBUG\', true );
define( \'WP_DEBUG_LOG\', true );

Then check wp-content/debug.log for more detailed error messages as to the origin of the error.



回答13:

I had the same problem. I noticed that there were new lines at the beginning of the file. So I removed them and the errors disappeared. Try removing the new lines at the beginning of your files. That may help.



回答14:

check here to see more info you can use:

<?php
     include_once( ABSPATH . \'wp-admin/includes/plugin.php\' ); 
            If (is_plugin_active(\'wshops/init.php\'))
            { 
               //Run your plugin includes files or functions
            }

in your init php file.



回答15:

My problem was that in the main php file, i had appended at the end of the file a javascript function. It seems that wordpress hooks such of a function in the head element. I externalised that function into a java script file.

Before:

<?php
/**
* Plugin Name: yyy
* Description: yyy
* Author: yyy
* Author URI: yyy
* Version: yyy
*/

/* many functions here */


function insert_in_header() {
    echo \'<script type=\"text/javascript\">\',
    \"perform_redirection(\", \'\"\', get_option(\'root\'), \'\"\', \", \", \'\"\', get_option(\'redirect_to\'), \'\");\',
    \'</script>\';
}
add_action(\'wp_head\', \'insert_in_header\');
?>
<--! PROBLEMS HERE-->
<script type = \"text/javascript\">
    function perform_redirections(root, redirectionLink) {
      // code here
    }
</script>

After:

<?php
/**
* Plugin Name: yyy
* Description: yyy
* Author: yyy
* Author URI: yyy
* Version: yyy
*/

/* many functions here */

function insert_in_header() {
    // in headscripts.js i put the perform_redirection function 
    echo \'<script type=\"text/javascript\" src=\"\', plugins_url(\'js/headscripts.js\', __FILE__ ), \'\">  </script>\';
    echo \'<script type=\"text/javascript\">\',
    \"perform_redirection(\", \'\"\', get_option(\'root\'), \'\"\', \", \", \'\"\', get_option(\'redirect_to\'), \'\");\',
    \'</script>\';
}
add_action(\'wp_head\', \'insert_in_header\');
?>


标签: php wordpress