繁体   English   中英

已发送奇怪的PHP标头

[英]Strange PHP Headers already sent

我有一个简单的模板渲染系统,其中包括页眉,模板和页脚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>';

那很好 我看不到为什么包含两个数组项字符串会破坏“标题”。

任何帮助,或需要测试的东西的指针都是最欢迎的。

查看您正在加载的所有内容的顺序可能会有所帮助,但是基于您所拥有的内容,我怀疑您正在渲染某些内容(如导航),然后在template.php中设置标题。 您可能要参考此答案 ,并发布更具体的代码,这些代码以什么顺序显示模板文件的加载。

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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM