插件上传后文件末尾的随机码

时间:2012-07-24 作者:leticia

我向WordPress网站(3.3.1)上传了一个插件,该插件在我的其他网站(3.3.1和3.4)上运行得很好,但当我尝试激活它时,会出现致命错误。当我检查插件的主文件内容进行一些更改并识别错误时,我检测到在代码末尾出现了重复的文件中的一些随机代码。

如果我编辑它并再次保存,另一个随机代码将再次放置在文件的末尾。

任何建议都将不胜感激,即使是关于做更多研究的建议。我真的不知道该怎么检查这个问题。

要添加所需信息的版本:

我测试停用所有插件,并使用211主题,我得到了相同的行为

添加的随机码示例

<?php
/*
Plugin Name: My plugin
Description: desc
Version: 1.0
*/

/**
 * Version of WordPress
 * @global  string  $wp_version
 */
global $wp_version;

$exit_msg = __(\'This plugin require WordPress 3.1 or newer\',\'seo-pressor\').\'. <a href="http://codex.wordpress.org/Upgrading_WordPress">\'.__(\'Please update\',\'seo-pressor\').\'</a>\';
if (version_compare($wp_version, "3.1", "<")) { 
    exit($exit_msg);
}

// Avoid name collisions.
if (!class_exists(\'WPPostsRateKeys\')) {
    class WPPostsRateKeys
    {
(... long piece of code ...)
    }
}

// create new instance of the class
$WPPostsRateKeys = new WPPostsRateKeys();
if (isset($WPPostsRateKeys)) {
    // register the activation function by passing the reference to our instance
    register_activation_hook(__FILE__, array(&$WPPostsRateKeys, \'install\'));
    register_deactivation_hook(__FILE__, array(&$WPPostsRateKeys, \'uninstall\'));
}][
正如您在末尾看到的,添加了“][”,使我的代码失败。

另一个信息:当我使用WordPress编辑插件文件功能打开我的文本文件时,我会在末尾看到随机代码,这将生成我的代码文件,但是如果我使用cPanel文件管理器打开同一个文件,该实用程序会首先要求我进行编码(分配文件UTF-8),并在末尾打开它,而不添加任何额外代码。无论如何,由于这个额外的代码,插件在WordPress中的激活仍然失败。

我已经将文件保存为没有BOM的FTP-8,并遵循http://www.toddlahman.com/the-plugin-generated-x-characters-of-unexpected-output-during-activation 而且不起作用。

当我在WordPress编辑器中打开文件时,会出现随机文本,但当我使用FTP客户端打开同一文件时,不会出现随机文本。

我需要如何编写或保存我的PHP文件以使其正常工作?

提前感谢Leticia

2 个回复
最合适的回答,由SO网友:bueltge 整理而成

检查是否有一个包含多个echo\'s、 在函数上调用的register_activation_hookregister_deactivation_hook.此外-此函数必须使用静态函数。

还有,您是否有可能var_dump() 在你的来源里面?

重要的是不要有输出(如echovar_dump) 插件的激活或停用。这不是激活过程的一部分。WP对此进行检查,并对在include上生成许多字符串的插件发出警告。检查您的输出是否只在正确的输出挂钩上工作,而不是在激活挂钩上工作等等。

此外,还包括使用挂钩的插件plugins_loaded (或init 作为替代)非vianew, 这与WordPress堆栈跟踪上的点不同。如以下示例所示:

class WPPostsRateKeys {

    static private $classobj;

    /**
     * Handler for the action \'init\'. Instantiates this class.
     *
     * @since   2.0.0
     * @access  public
     * @return  $classobj
     */
    public function get_object() {

        if ( NULL === self :: $classobj ) {
            self :: $classobj = new self;
        }

        return self :: $classobj;
    }

    public function __construct() {

    }

}

if ( function_exists( \'add_action\' ) && class_exists( \'WPPostsRateKeys\' ) ) {
    add_action( \'plugins_loaded\', array( \'WPPostsRateKeys\', \'get_object\' ) );
}
也可能,但在其他答案和link 来自问题。

php开始标记前的空白<?php?>

SO网友:jackson5

看起来像是UTF-8 vs ASCII问题,请尝试将文件重新保存为UTF-8并通过FTP上载。

结束

相关推荐