За последние 24 часа нас посетили 24544 программиста и 1800 роботов. Сейчас ищут 944 программиста ...

Cannot modify header information - headers already sent by

Тема в разделе "PHP для новичков", создана пользователем q0b3rMAN, 4 июл 2013.

  1. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    В общем уже часов 5 ломаю голову.
    У меня сайт состоит из include блоков, т.е:
    шапка
    страница
    футер

    Где страница - страница авторизации. Проблема при авторизации:
    Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\GQ\engine\block\header.php:10) in C:\OpenServer\domains\GQ\engine\content\login.php on line 50

    Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\GQ\engine\block\header.php:10) in C:\OpenServer\domains\GQ\engine\content\login.php on line 51

    Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\GQ\engine\block\header.php:10) in C:\OpenServer\domains\GQ\engine\content\login.php on line 53


    Как решить проблему я в принципе знаю, если убрать вывод HTML до 50 строки в файле login.php все будет в порядке. Но проблема в том, что я не могу убрать header.php, т.к. там шапка. Помогите пожалуйста, как решить проблему?

    Добавлено спустя 7 минут 4 секунды:
    В голову пришло решение, но оно мне совсем не нравится.
    Перенести код из 50, 51, 53 строк в функцию. Заместо них выставить переменную в сессии, и в начале сайта проверять есть ли эта переменная в сессии, и там выставлять куки функцией. Если реализовать так, это может на что-то повлиять отрицательным образом?

    Добавлено спустя 42 минуты 20 секунд:
    Решено, решение описано выше.
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Cannot modify header information - headers already sent

    То ли кодировка толи заголовки header()

    Utf-8 без Bom?

    В коде есть header(); заголовки? если есть то придется либо до html отправлять или использовать буферизацию.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Cannot modify header information - headers already sent

    q0b3rMAN, в каждом из файлов, которые подклчаются по include/require удали завершающий ?> он необязателен и сейчас рекомендуется НЕ использовать его. потому что невидимый глазу перевод строки после него порождает такую хрень как у тебя.

    Добавлено спустя 3 минуты 12 секунд:
    Re: Cannot modify header information - headers already sent by
    буферизация тоже вылечит, но это "заплатка", а не решение проблемы. это как собаку @ ставить вместо исправления ошибки.

    кстати! другая вероятная причине - где-то происходит ошибка (Warning) и в вывод попадает его текст до твоих header() или session_start(). решается исправлением ошибки :)
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Cannot modify header information - headers already sent

     
  6. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    Да тут самое главное убрать вывод html-кода после headera,тогда ненужна будет буферизация
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    Re: Cannot modify header information - headers already sent

    может до?
    echo
    echo
    ....
    header();
    ///////////////
    проблему другим способом решить можно. Так же может ругаться когда:
    while (....) {
    .....
    }
    header или setcookie или т.д.
     
  8. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    правильно - до
    Я когда впервые столкнулся с этим вопросом , сразу воткнул ob_start ,но потом перенес обработчик ,который обновлял header , в начало
    скриптика и это позволило убрать буферизацию.
     
  9. duhnochi

    duhnochi Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    Решение проблемы:


    Запомни раз и на всегда, header() (Заголовки) отправляй ДО любого вывода.

    Т.е.
    Код (Text):
    1. <?php header(..); ?>
    2. <html...>
    Почему? Потому что сначала отправляются заголовки, чтобы клиент сформировал "представление" о документе, а на основе этого решал что делать. А так ты (а может и не ты) отсылаешь ему заголовки, чтото пытаешься потом вывести и снова отправить заголовки.

    Чтобы иметь представление: http://phpmove.ru/header.html
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    Re: Cannot modify header information - headers already sent

    уууууууууиииииииии решил прям :3

    а ты решишь проблему когда header в любом случае потребуется захренячить в центр кода ?
     
  11. duhnochi

    duhnochi Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    У меня навязывается только одна мысль - если header потребовалось, как вы сказали, "захренячить" в центр кода, то это яркий пример рукоанусной реализации

    Но если, а такое вполне может быть, я все-таки ощибаюсь, то буферизация в помощь (кстати, работает быстрее, чем echo). Но я предпочитаю (как и многие мне знакомые PHP-программисты), отправлять заголовки ДО любого вывода. Иными словами "захренячить" их в начало кода
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Cannot modify header information - headers already sent

    Не стоит так думать. Буфера рулят. Без них никуда.
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Cannot modify header information - headers already sent

    =)
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    Re: Cannot modify header information - headers already sent

    ----------------------------------
    ЗОЛОТЫЕ слова :3 :
    Добавлено спустя 2 минуты 31 секунду:
    Re: Cannot modify header information - headers already sent by
    через это все проходили. Улучшали, оттачивали свои идеалы в программировании и искали "лучший, быстрый, не всегда легкий выход"
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  16. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Cannot modify header information - headers already sent

    :) Буфера это хорошо, от них еще никто не отказывался :)
     
  17. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    Стопицот хидеров можно отгрузить из любого места кода при условии что никакой не конфликтует с любым другим. Чтобы передать байт информации в браузер сервер предваряет посылку кучей байтов объясняющих браузеру что значит этот самый байт. Если сервер вас опередил - сушите весла. Все просто.

    Сообщение header already sent хороший признак того что логика скрипта неправильная и надо ее менять.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Cannot modify header information - headers already sent

    ты что-то походу не врубаешься как оно работает.
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    Re: Cannot modify header information - headers already sent

    Ты все сказал? а то я нупик и это не понимаю.Подавай свежатину с веслами.
     
  20. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Re: Cannot modify header information - headers already sent

    Ну вы-то врубились так что не вытащить уже.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Cannot modify header information - headers already sent

    то что ты тут написал
    это поток сознания, не связанный с проблемой "headers already sent".