header() снова

1. Apeccc (23.01.2013 / 14:09)
Доброго времени.
Что-то я никак не пойму.
Задача:
Вывести шапку в каждый файл, + верхнее меню.
Файл регистрации проверяет наличие ошибок.
function head(){
	echo '
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
	<html>
	<head>
	<link rel="stylesheet" href="/styles/standart/style.css" type="text/css">
	<title>Тест</title>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
	</head><body>
	<div class="nav">
    <a href="/">Главная</a> :: <a href="/">Ссылка 1</a> :: <a href="/">Ссылка 2</a>
	</div>
	';
 }
Выше функция шапки.
Ниже - код из регистрации:
<?php

include('core/db.php');
include('core/settings.php');
include('core/style.php');
include('core/func.php');
head();
auth();

if (isset($_GET['go']) && $_GET['go']=='reg'){
		if($login == '' or $login == NULL or strlen($login) > 20){
		header ("Location: reg.php");
		exit;
		}...
При ошибке ругается на тот факт, что header уже отправлен в foot();
Ваши советы?

2. andpov (23.01.2013 / 14:23)
header(Location: ../index.php); //куда отправляем пользователя
exit();
наверно так

3. Изнаур (23.01.2013 / 14:31)
<?php
include('core/db.php'); 
include('core/settings.php'); 
include('core/style.php'); 
include('core/func.php'); 
auth(); 

if (isset($_GET['go']) && $_GET['go']=='reg'){ 
        if($login == '' or $login == NULL or strlen($login) > 20){ 
        header ("Location: reg.php"); 
        exit; 
        }
else
{
head()
//ваш код
}
?>


4. Кевин Митник (23.01.2013 / 14:32)
если я правильно понял, то в скрипте не включена буферизация, функция ob_start(). А если так, то если что-то попало в вывод ДО функции header(), то будет ошибка. Лечиться буферизацией: в начале скрипта - ob_start(); в конце ob_end_flush();

5. Алексей (23.01.2013 / 14:59)
4. Кевин Митник_HHTeam, ob_start() это не лечение а костыль.

6. Apeccc (23.01.2013 / 16:51)
3. Iznaur95, точно, сам не додумался.
Большое спасибо.

7. Кевин Митник (23.01.2013 / 17:33)
#5, да? никогда не думал о буферизации, как о костыле. Много чего полезного можно с её помощью сделать. Интересно от тебя это слышать. Ты же вроде как знающий.

P.S в данном случае, #3 правильно написал, то есть вывод шапки уже после header();

8. Алексей (23.01.2013 / 18:21)
7. Кевин Митник_HHTeam, а ты сам подумай зачем здесь буферизация? вон в посте #5 уже написали без нее.

9. mozzzg (07.06.2013 / 09:17)
В куче скриптов дублируют кодировку в хеадере и тегом meta 2 раза.
header("Content-type:text/html; charset=utf-8");
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Увидел инфу, что если кодировка есть в заголовке документа, то в других местах уже не важно что написано. Если в мета написать другую, то документ не изменится.

URL: https://visavi.net/topics/36352