Странные заголовки PHP уже отправлены

У меня есть простая система рендеринга шаблонов, которая включает 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

Решение

Просмотр порядка загрузки всего этого может помочь, но исходя из того, что у вас есть, я подозреваю, что вы что-то рендерите (например, nav) перед установкой заголовков в 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.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]