我在为自己构建的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 ""); echo \'" - \'; }
我看过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
最合适的回答,由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
或者为什么,所以实际的解决方案可能更复杂,但这是基本的解决方案。