我有一个简单的模板渲染系统,包括页眉,模板和页脚PHP文件。标头有一个PHP函数调用来呈现导航栏。模板有一个函数调用,用于设置标题('location ...');页脚只是基本的HTML。
当我查看该页面时,我收到“已发送标题”错误,指定标题中用于回显导航栏的行。如果我修改代码以删除导航中的子元素,我不会收到“已发送标题”错误。子元素只不过是数组项。如果我用虚拟文本替换它们,那么页面会正确重定向。
我想这很简单,但是让我难过!
header.php(传入的int指定要扫描的深度)
<ul class="nav navbar-nav"><?php echo getNavigation(1); ?></ul>
的template.php
// Run from start
default:
$_SESSION['updateStart'] = microtime(true);
$_SESSION['updateErrors'] = array();
$_SESSION['updateLog'] = array();
header('location: /update-products?action=getDataFeeds');
exit();
break;
getNavigation函数:
function getNavigation($depth) {
global $path, $misc;
$items = $misc->getNavigation(1,(int)$depth,true);
$nav = "";
if($items) {
foreach($items as $item) {
$class = ($item['ob_alias']==("/".$path[0])?' class="active"':'');
$nav .= '<li'.$class.'>';
if(isset($item['children'])) {
$nav .= '<a href="#" class="dropdown-toggle" data-toggle="dropdown">'.$item['ob_label'].' <span class="caret"></span></a>';
$nav .= '<ul class="dropdown-menu" role="menu">';
foreach($item['children'] as $child) {
$class = ((isset($path[1]) && $child['ob_alias']==("/".$path[1]))?' class="active"':'');
$nav .= '<li'.$class.'><a href="'.$child['ob_alias'].'">'.$child['ob_label'].'</a></li>';
}
$nav .= '</ul>';
} else {
$nav .= '<a href="'.$item['ob_alias'].'">'.$item['ob_label'].'</a>';
}
$nav .= '</li>';
}
}
return $nav;
}
我试图浏览我的代码以及我可以做的所有事情来切换错误Vs.让页面按预期运行是在我的getNavigation()调用中替换这一行:
$nav .= '<li'.$class.'><a href="'.$child['ob_alias'].'">'.$child['ob_label'].'</a></li>';
与
$nav .= '<li>Some dummy text</li>';
然后没关系。我不明白为什么包含两个数组项字符串会破坏'标题'。
任何帮助或指向测试的东西都是最受欢迎的。
答案 0 :(得分:1)
看到你加载所有这些的顺序可能会有所帮助,但是根据你拥有的内容,我会怀疑你在template.php中设置标题之前渲染了某些内容(比如导航)。您可能需要reference this answer以及发布更具体的代码,以显示模板文件的加载顺序。
Functions that send/modify HTTP headers must be invoked before any output is made.
Otherwise the call fails.
Output can be:
Unintentional:
Whitespace before <?php or after ?>
UTF-8 Byte Order Mark
Previous error messages or notices
Intentional:
print, echo and other functions producing output (like var_dump)
Raw <html> areas before <?php code.