За последние 24 часа нас посетили 54004 программиста и 14852 робота. Сейчас ищут 1523 программиста ...

session_start

Тема в разделе "PHP для новичков", создана пользователем gryllus, 19 окт 2017.

  1. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Здравствуйте!

    Создаю форму регистрации на сайте(точнее учусь создавать)было всё хорошо пока в файле db.php не добавил session_start();


    Код:

    PHP:
    1. <?php
    2.  
    3. require "libs/rb.php";
    4.  
    5. R::setup( 'mysql:host=localhost;dbname=fwt',
    6.         'mysql', 'mysql' );
    7.      
    8.      
    9. ?>

    Здесь представлен весь код в файле, а не его фрагмент.

    Упало с таким определением:
    Цитата:
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\OSPanel\domains\fwt.loc\index.ph p:1) in C:\OSPanel\domains\fwt.loc\db.php on line 8
    и с таким
    Цитата:
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\OSPanel\domains\fwt.loc\index.ph p:1) in C:\OSPanel\domains\fwt.loc\db.php on line 8
    соответственно в каждом файле php в котором
    есть подключение к данной функции.

    Пробовал многое и в начале кода ставил и отступы проверял, и ставил в файле кодировку UTF-8 без BOM. И ещё проделывал разные разные штуки, ставил какие-то скрипты(не помню сейчас какие) в начале и конце страницы...
    Самое интересное, что эта Warning: session_start(): извечный вопрос, как мне показалось... Мне кажется, что в моём случае поле деятельности поиска ошибок для данного кода не очень огромен.)))
    Что меня побудило вновь задать данный вопрос: у человека всё один в один сделано и это работает, разница лишь в том, что он код пишет в Sublime Text Build 3, а я в Notepad++ (поддерживает кодировку UTF-8 без BOM).
    Может кто-то сможет не отмахнувшись объяснить, что мне надо ещё сделать или куда заглянуть. У человека-то работает, а!!!

    Заранее Спасибо!

    "На свете нет ни чего не возможного - дело только в том, хватит ли у тебя храбрости."

    Джоан Роулинг
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    index.ph p:1
    смотри там что выводит
    --- Добавлено ---
    посмотреть на ошибки выданные
     
  3. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Спасибо за ответ! Но мне, к моему величайшему сожалению не совсем понятно, даже скажем совсем не понятно, что мне там нужно посмотреть. Я кажется понял, какую ошибку? Если какую ошибку, то ту же самую:
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\OSPanel\domains\fwt.loc\index.php:1) in C:\OSPanel\domains\fwt.loc\db.php on line 8
    и
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\OSPanel\domains\fwt.loc\index.php:1) in C:\OSPanel\domains\fwt.loc\db.php on line 8
    везде одно и тоже только в этом месте (output started at C:\OSPanel\domains\fwt.loc\index.php:1) где index.php выдаёт название файла login.php или signup.php ...

    Вот код
    index.php:
    PHP:
    1. <?php
    2.   require "db.php";
    3. ?>
    4. <?php if( isset($_SESSION['logged_user']) ) : ?>
    5.   Авторизован!
    6. <?php else : ?>
    7.   <a href="/login.php">Авторизация</a><br>
    8.   <a href="/signup.php">Регистрация</a>
    9. <?php endif; ?>

     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    придётся объяснить матчасть :( любая веб-страничка или картинка с сайта или что угодно, переданное по протоколу http это сообщение, которое состоит из строк заголовка, за которыми едёт тело сообщения. только в такой последовательности: заголовок-тело.

    session_start() внутри себя вызывает вывод заголовка ( аналог вызова функции header("Set-cookie…") ) и если перед этим php уже вывел что-то, неважно что, то вывод заголовка уже невозможен. об этом тебе и пишут предупредение.
    вот здесь указано где причина — где бы начат вывод тела.
     
    Dimon2x нравится это.
  5. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Доброго дня!

    ...извините где? Второй день на форуме, пока ещё плохо ориентируюсь.))) Буду благодарен если ткнёте носом.
     
  6. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    В сообщение ошибки и указана причина. Такое сообщение означает, что вы вызываете функцию session_start после того как какие-то заголовки уже отправлены браузеру. Данная функция должна вызываться до того как вы передаете любой текст или заголовки. По этому желательно её писать сразу после открытия <?php . И проверьте, чтобы перед функцией не было никаких пробелов.
    --- Добавлено ---
    Можете почитать http://phpfaq.ru/newbie/headers чтобы лучше понять.
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    (output started at <файл>:<номер строки>)
    так понятнее?

    если опять нет, то у вас какое-то расстройство восприятия. компьютеры не для вас
     
  8. andironbrin

    andironbrin Новичок

    С нами с:
    15 окт 2017
    Сообщения:
    50
    Симпатии:
    4
    я когда на форум первый раз заходил, я хорошо арентировался
     
  9. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Огромное спасибо!
    Правда проблема разрешилась частично. Всё перерыл, думаю добраться до php.ini и директиву output_buffering поставить в «On» но пока не знаю где он находится в Open Server.

    "Пусть в жизни всегда будет момент для счастья, повод для улыбки и время для мечты."
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
  11. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Здравствуйте!

    Убирал BOM в редакторе, выдаёт такое:
    Свою проблему решил, с помощью директивы output_buffering. Удовлетворение конечно не получено так как чистота кода отсутствует. И всё таки очень хотелось бы знать где, или в чём была допущена ошибка.

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\OSPanel\domains\fwt.loc\db.php:1) in C:\OSPanel\domains\fwt.loc\db.php on line 7 обратите внимание на конечные файлы из \db.php:1 и в \db.php on line 7... такое только в файле регистрации, а в остальных:
    файл авторизации
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\OSPanel\domains\fwt.loc\login.php:1) in C:\OSPanel\domains\fwt.loc\db.php on line 7
    и файл ihdex
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\OSPanel\domains\fwt.loc\index.php:1) in C:\OSPanel\domains\fwt.loc\db.php on line 7
    ковырялся два дня так и не не нашёл в чём проблема...

    Всем Спасибо и С Наилучшими пожеланиями!


    "Знания ограничены, тогда ка воображение охватывает целый мир, стимулируя прогресс, порождая эволюцию."

    Альберт Эйнштейн
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @gryllus
    Ты заголовки отправил уже, так что у тебя ошибка и будет показывать. Убери все заголовки сообщения которые отправляются раньше чем выполняется этот скрипт.
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    проблема в BOM — невидимые тебе символы присутствуют до <?php

    это заглушка, а не решение. ошибка вылезет снова когда ты скопируешь файлы на другой сервер.

    где выдаёт? бро, это не то чем кажется ))) зависит от настроек редактора/вьюера. то что ты увидел это попытка показать текст в кодировке UTF-8 как Windows-1251. неправильный взгляд, а не неправильные данные, понимаешь?
     
  14. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    ...я всё таки не унялся и попробовал вставить мета-тег <meta charset="UTF-8"> только в db.php файл как казалось мне от него всё зло исходит, а остальные сделал с кодировкой UTF-8 without BOM. И ...voila(вуаля) всё работает(без ошибок) с директивой output_buffering в «Off».

    Спасибо, всё понятно и доходчиво объясняете.

    "Чем больше получаешь знаний, тем меньше времени на то, что бы их использовать"
     
  15. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    открываешь в notepad и делаешь без BOM
     
  16. gryllus

    gryllus Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    город Пермь
    Это я сделал в первую очередь, стало выдавать непонятное:

    - это мне объяснил artoodetoo.

    После чего стал искать выход, мне, человек подсказал, что без BOM то же правильно делать надо. У меня голый php код и там соответственно отсутствует мета-тег charset, из-за этого данная ошибка тоже может присутствовать, я его добавил и всё заработало.