@freshik312

Заголовк в php?

Ребят, подскажите..

Есть файл в котором:
<?
if ($user->ban == 1){
    unset ($_SESSION['auth']);
}

?>
<!doctype html>
<html>
<?require 'head.php'?>
<body>
<?require 'header.php'?>

<div class="container">
    <div class="content">
        <?
        if ($g['t'] == 'be'){
            if (!$_SESSION['auth']){
                header('location: /auth?t=login');
            }else{
                require 'file.php';
            }
        }
        ?>
    </div>
</div>

<?require 'footer.php'?>

</body>
</html>

так, вот, мне выдает ошибку:
spoiler
Warning: Cannot modify header information - headers already sent by (output started at tz\seller.php:12) in tz\seller.php on line 24


на 12 строке: <?require 'head.php'?>, на 24: header('location: /auth?t=login');

в файлах head и header нету никаких заголовков, нету пробелов в начале документа..

решил запихнуть в самое начало, этого, файла:
if ($g['t'] == 'be'){
            if (!$_SESSION['auth']){
                header('location: /auth?t=login');
            }else{
                require 'file.php';
            }
        }


т.е.

<?
if ($user->ban == 1){
    unset ($_SESSION['auth']);
}
 if ($g['t'] == 'be'){
            if (!$_SESSION['auth']){
                header('location: /auth?t=login');
            }else{
                require 'file.php';
            }
        }
?>
<!doctype html>
<html>
<?require 'head.php'?>
<body>
<?require 'header.php'?>

<div class="container">
    <div class="content">

    </div>
</div>

<?require 'footer.php'?>

</body>
</html>


все круто, но в файле file.php форма и из-за того, что выводится в начале документа - ломается вся структура html.
Суть вопроса: как вывести инфу из другого файла в определенный div при помощи php ? Или как обойти ошибку: Warning: Cannot modify header information... ?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
if (!$_SESSION['auth']){
                header('location: /auth?t=login');
            }else{
                require 'file.php';
            }

В начало скрипта перенесите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
В первом случае вы пытаетесь вывести header location после того, как уже вывели какой-то html-код.
То есть заголовки уже отправлены, а то что внутри HTML уже не может называться заголовками.

Во втором случае вы выводите содержимое file.php еще до
Естественно, страница "ломается".

Можно переделать как-то так:

<?php
// непонятно откуда вообще взялся $user, но пускай
if ($user->ban){
    unset ($_SESSION['auth']);
    header('location: /banned');
    exit;
} elseif (!$_SESSION['auth']) {
    header('location: /auth');
    exit;
}
?>
<!doctype html>
<html> // бла-бла-бла
и только там где-то внутри html 
if(всё ок) {
  require 'file.php';
}


Но как только нормально разберетесь как это все работает можно прекращать этот цирк и читать про шаблонизаторы и роутинг.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы