-1

Ошибка:

Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\as\vendor\fenom\fenom\src\Fenom\Template.php(487) : eval()'d code:7) in D:\OpenServer\domains\as\app\classes\Core.php on line 29

Облазил весь код, искал проблемы по include и тд, но так и не нашел решение. Использую PHP7 и не могу разобраться в проблеме.

Код Core.php:

/**
 * @param string $page
 */
static function stop($page = '/')
{
    header('location: '.$page);
    exit;
}

Само файл в котором ошибка:

<?php
if($Auth->isLoginned())
{
    Core::stop();
}

include INC. 'header.php';
Lang::addWords('registration.ini');
$title = Lang::tr('Registration.title');



if(!empty($_POST))
{
    $fraction = abs(intval($_POST['fraction']));
    Sessions::set('fraction', $fraction);
    Core::stop('/auth/start/sex');
}

$fraction = array();
$fraction = Vars::get('db')->query('SELECT `id`,`name` FROM `fraction` ORDER BY `member` ASC')->fetch_all();
Vars::get('fenom')->display('tutorial/start.tpl', ["fraction" => $fraction]);

include INC. 'footer.php';

Помогите пожалуйста.

No0k
  • 21
  • 2
    такие ошибки бывают когда у вас выпадывает какой-нибудь notice или вы делаете print_r до того, как скрипт отправляет http-заголовки. Собственно, у вас в ошибке приведено имя файла и номер строки, с указанием имени функции, которая выдала что-то раньше отправки требуемых заголовков. Допустим выпало сообщение об ошибке, а потом вы хотите сделать редирект - не выйдет. – teran Feb 10 '17 at 08:34
  • собственно так у вас и происходит. в указанном месте кто-то пишет в аутпут, а потом вы делаете header('location: ...) в Core::stop() – teran Feb 10 '17 at 08:36
  • Я ведь получил POST данные, обработал и перенаправил. Это не правильно? Все спасибо разобрался. – No0k Feb 10 '17 at 08:50
  • Правильно, проблема в том, что в процессе обработки у вас функция eval в указанном шаблоне что-то выводит на экран. После этого редирект сделать невозможно. Т.к. фактически вам надо отправить 302й код ответа, а уже отправлен 200й. – teran Feb 10 '17 at 08:55
  • 2
    Возможный дубликат вопроса: Cannot modify header information - headers already sent by – pavel Feb 12 '17 at 13:27

1 Answers1

0

Проблема была в том что я вывел шапку сайта выше получения пост запроса. Детская ошибка. Конечный результат:

<?php

if($Auth->isLoginned())
{
    Core::stop();
}

if(!empty($_POST))
{
    $fraction = abs(intval($_POST['fraction']));
    Sessions::set('fraction', $fraction);
    Core::stop('/auth/start/sex');
}

Lang::addWords('registration.ini');
$title = Lang::tr('Registration.title');


include INC. 'header.php';

$fraction = array();
$fraction = Vars::get('db')->query('SELECT `id`,`name` FROM `fraction` ORDER BY `member` ASC')->fetch_all();
Vars::get('fenom')->display('tutorial/start.tpl', ["fraction" => $fraction]);

include INC. 'footer.php';
No0k
  • 21
  • 1
    вы разделяйте логику приложения и представление, и не будет таких проблем в принципе никогда. – teran Feb 10 '17 at 08:59
  • Можете примерно объяснить на приме этого кода? Я просто только учусь и буду рад любой информации. – No0k Feb 10 '17 at 12:52
  • почитайте про [tag:smarty] или [tag:twig] например. суть в том, что в одних файлах должен быть пхп код (логика/данные), в других html (представление). У вас тут вроде есть какие то tpl-шаблоны, но не понятно. что за header.php еще подключается. Там я так понял у вас шапка сайта, но не ясно, почему она тоже не в tpl-шаблонах. – teran Feb 10 '17 at 13:32