从插件获取已发送的标头时出错

时间:2013-07-05 作者:Osu

我在为自己构建的Wordpress插件中遇到了一个“headers ready sent”错误,现在我正在进行调整。这是错误:

警告:session\\u start()[函数.session start]:无法发送会话缓存限制器-已在/home1/uname/directory/domain.com/wp-content/themes/ibm/header.php:2中发送了标头(输出开始于/home1/uname/directory/domain)。com/wp内容/插件/osu rfm/osu rfm。php第225行

我已经看过头球了。php第2行,这里没有额外的空格,也没有有趣的字符等:

<!DOCTYPE html>
<!--[if lt IE 7 ]> <html class="ie ie6 no-js" <?php language_attributes(); ?>> <![endif]-->
<!--[if IE 7 ]>    <html class="ie ie7 no-js" <?php language_attributes(); ?>> <![endif]-->
<!--[if IE 8 ]>    <html class="ie ie8 no-js" <?php language_attributes(); ?>> <![endif]-->
<!--[if IE 9 ]>    <html class="ie ie9 no-js" <?php language_attributes(); ?>> <![endif]-->
<!--[if gt IE 9]><!--><html class="no-js" <?php language_attributes(); ?>><!--<![endif]-->
<!-- the "no-js" class is for Modernizr. -->

<head id="osu-rfm" data-template-set="html5-reset-wordpress-theme" profile="http://gmpg.org/xfn/11">

    <title>
           <?php
              if (function_exists(\'is_tag\') && is_tag()) {
                 single_tag_title("Tag Archive for &quot;"); echo \'&quot; - \'; }
我看过osu rfm中的225行。php,这是该文件的一部分(这是插件btw):

public static function enable_sessions()
{
    if( is_post_type_archive( "ibmdirectory" ) || "ibmdirectory" == get_post_type() )
    {
        if( ! isset( $_SESSION ) )
    /*
    if(headers_sent($filename, $linenum)) {
        //if headers already sent out print some message.
        echo "Headers already sent in $filename on line $linenum\\n";
    } else {
        //if headers not already sent
        echo "New headers";
    }
    */
        session_start();
    }
}
现在我完全被卡住了,因为我不知道下一步该做什么。。。有人能提些建议吗?我删除了所有主题文件末尾和开头的所有空白as suggested here, 但这似乎没有什么不同。我也尝试过删除结束语?> 标签在我的插件文件的末尾,但nada。

顺便说一下,这只发生在我的实时服务器上,而不是我的本地设置上,所以我觉得这可能是服务器问题。

谢谢

Osu

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

如果您查看页面的来源,您将在第122行附近看到:

<div class="nav-collapse collapse">
                    <br />
<b>Warning</b>:  session_start() [<a href=\'function.session-start\'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home1/onesizeu/clients/instrumentalbackgroundmusic.com/wp-includes/functions.php:2841) in <b>/home1/onesizeu/clients/instrumentalbackgroundmusic.com/wp-content/plugins/osu-royaltfreemusic/osu-royaltyfreemusic.php</b> on line <b>225</b><br />
<br />
<b>Warning</b>:  session_start() [<a href=\'function.session-start\'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home1/onesizeu/clients/instrumentalbackgroundmusic.com/wp-includes/functions.php:2841) in <b>/home1/onesizeu/clients/instrumentalbackgroundmusic.com/wp-content/plugins/osu-royaltfreemusic/osu-royaltyfreemusic.php</b> on line <b>225</b><br />
<ul id="menu-primary" class="nav"><li id="menu-item-9" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9"><a href="http://www.instrumentalbackgroundmusic.com/">Home</a></li>
有人试图在页面正文中启动会话。你不能那样做。在将任何内容发送到浏览器之前,需要启动会话。

解决这个问题的方法在概念上很简单——钩住session_start 在打印内容之前运行的某个挂钩的函数。类似这样:

function boot_session() {
  session_start();
}
add_action(\'wp_loaded\',\'boot_session\');
我不知道到底是什么session_start 或者为什么,所以实际的解决方案可能更复杂,但这是基本的解决方案。

结束

相关推荐

Google 404 Errors

谷歌似乎试图抓取我从未创建过的页面,但出现了404错误,但它认为,或者可能在我的代码中的某个地方,谷歌认为还有第二个页面。例如,我有这个页面http://ecsimplified.com/portfolio_category/tops但谷歌找到的404不是这个页面error://ecsimplified.com/portfolio_category/tops/page/2/既然我没有创建此页面或链接到此页面,为什么它会发现此错误?