Передача заголовков php

170
10 апреля 2018, 03:58

Доброго времени суток. Не понимаю в чём ошибка в коде. В браузере вылезает ошибка при редиректе на другой файл - Cannot modify header information - headers already sent by. Объясните, где я накосячил? В интернете искал инфу, понял примерно суть ошибки, но как её исправить не знаю. Уже и хтмл код удалял, и все пробелы с пустыми строками смотрел, не могу понять в чём проблема.

<!DOCTYPE  HTML>
        <html>
        <meta charset="utf-8">
        </html>
    <?php
    if (isset($_POST['login'])) 
        { 
            $login = $_POST['login']; 
        } 
        if (isset($_POST['password'])) 
            { 
                $password=$_POST['password']; 
            }  
        $login = stripslashes($login);
        $login = htmlspecialchars($login);
        $password = stripslashes($password);
        $password = htmlspecialchars($password);
        $login = trim($login);
        $password = trim($password);
        include ("bd.php"); 
        $result = mysql_query("SELECT * FROM users WHERE login='$login'",$db); 
        $myrow = mysql_fetch_array($result);
        if (empty($myrow['password']))
        {
            exit ("Извините, введённый вами login или пароль неверный.");
        }
        else 
            {
                if ($myrow['password']==$password) 
                    {
                        $_SESSION['login']=$myrow['login']; 
                        $_SESSION['id']=$myrow['id'];
                        //echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a>";
                        header('Location: http://localhost/practice/main.php/');
                        exit;
                    }       
                 else 
                    {
                        exit ("Извините, введённый вами login или пароль неверный.");
                    }
            }
    ?>
Answer 1

PHP при выводе результата работы скрипта использует буферизацию

Обычный HTTP-протокол состоит из двух условных секций: заголовки HTTP и тело страницы. PHP генерирует как правило тело страницы, но управление заголовками ему тоже доступно, с помощью функции header() например

Однако есть ограничение - нельзя отправить кусок тела HTTP, а потом поменять header, поскольку он идет ДО тела HTTP

Чтобы этого избежать используют конструкции следующего вида:

ob_start();
$page = SomeFunctionOrClassMethod();
print $page;
ob_flush();

Здесь под SomeFunctionOrClassMethod() понимают что-то, что будет генерировать для вас эту страницу. В процессе генерации может возникнуть ситуация, когда надо будет записать header - не вопрос, благодаря ob_start() вывода в поток HTTP еще не было. Вывод будет только при вызове ob_flush()

READ ALSO
Чтение файла при помощи интерфейса SeekableIterator

Чтение файла при помощи интерфейса SeekableIterator

Всем доброго времени суток, не имел опыта работы с данных итераторомПытаюсь разобраться

154
Как сделать плавное появление текса при скроле [требует правки]

Как сделать плавное появление текса при скроле [требует правки]

Как сделать плавное появление текса при скроле*???

206
Реализация урона по врагам

Реализация урона по врагам

Есть код отнимание ХП у врагов, но он не работает

211