Cannot modify header information

273
11 февраля 2017, 10:01

Ошибка:

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';

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

Answer 1

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

<?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';
Answer 2

Во избежание случайного вывода подобного рода, можно пользоваться буферизацией:

<?php
ob_start();
// Весь код
echo 'Something';
setcookie('xcounter', 1);
ob_end_flush();

Возможные причины возникновения такой ошибки:

  1. Прямой вывод (echo/print/var_dump и тп)
  2. Пробелы/перенос строки перед <?php в начале файла - это такой же вывод, как и echo.
  3. То же самое касается и конца файла, символы после ?> идут на вывод, по возможности закрытие блока php рекомендуется опускать.
  4. Ошибки в коде, могут генерировать Notice/Warning.., которые незамедлительно отправляются на вывод.
READ ALSO
Как использовать библиотеку Google Analytics

Как использовать библиотеку Google Analytics

ЗдравствуйтеИспользую клиентскую библиотеку для Google Analytics Для авторизации использую такой код (ниже), но проблема в том что он работает только...

327
Как выключить модуль bitrix через FTP?

Как выключить модуль bitrix через FTP?

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

536
Веб сокеты linux

Веб сокеты linux

Здравствуйте! Нашёл вот такую штуку как websocketd http://websocketdcom Кто ни будь пользовался? Как правильно установить? В директорию с папкой сайта или...

327
Как сохранить форму [Symfony3]

Как сохранить форму [Symfony3]

Всем привет! Подскажите, как могу сохранить форму в разные таблицы? У меня три таблицы 1Заведения (кафе, рестораны

331