Я получаю это предупреждение, которое не позволяет мне продолжать:
Предупреждение: session_start(): невозможно начать сеанс, если заголовки уже отправлены в C:\xampp\htdocs\bancoinfocial\index.php в строке 45.
Примечание. Неопределенная переменная: _SESSION в C:\xampp\htdocs\bancoinfocial\principal.php в строке 3.
И это мой код:
index.php
<div id="principal" hidden>
<?php
session_start();
require_once("principal.php");
?>
</div>
main.php
<div>
<?php
echo $_SESSION['fullname'];
?>
</div>
То есть, я вызываю Principal.php из index.php , где невозможно войти из-за уже отправленных заголовков, даже несмотря на то, что это первая инструкция, которую я выполняю при каждом вызове метода session_start()
.
session_start()
— это функция, которая отправляет различные заголовки HTTP в зависимости от конфигурации, поэтому ее нельзя выполнить после того, как содержимое было записано (поскольку тогда заголовки не могут быть изменены).У вас есть
<div>
HTML-код, который предшествуетsession_start
PHP-коду, и именно это вызывает проблему.session_start
должно быть первым, прежде чем что-либо будет написано. Поэтому вы должны переместить его в начало всего, чтобы избежать этой ошибки:Проблема в том, что вы делаете это
div
в своем html перед проверкой сеанса. В PHP этоsession_start();
должно стоять перед чем-либо еще. Еще до негоdiv
.Попробуйте следующее:
index.php
Чтобы это работало, вы должны переместить сессию session_start в начало index.php.
Индекс.php
main.php
То же самое случилось со мной, попробуйте сделать это:
решение 1
Если это не работает для вас, это может быть нативная функция, которую вы используете из php, которая создает сеанс или что-то в этом роде и не позволяет вам включать файл, в моем случае это было следующее.
Это ("base64_encode()" не позволило мне включить файл с php, где он запустит сеанс.
Решение 2
решение кажется сложным, но это не так, вам просто нужно создать контейнер, в который вы собираетесь включить все, и вы включаете его с помощью Javascript и ajax следующим образом:
Чтобы он загружался в начале страницы, вы должны поставить его так:
решение 3
да, наконец, если вы включите эту строку
session_start();
в файл php, который вы включаете, и где он их включает, то есть в родительском и в дочернем, решение состоит в том, чтобы просто оставить его в файле, и вы должны оставить его там, где вам нужно использовать эту глобальную переменную$_SESSION
.У меня была такая же проблема, и это был простой пробел перед вызовом сеанса... Очень хорошее наблюдение другого коллеги, потому что я бы не поверил!
Это работает следующим образом:
возможно, проблема в версии PHP, которую вы используете. Если у вас PHP 7.2, понизьте его до версии 7.1, которая является гораздо более стабильной версией.
Он также обладает большинством замечательных достижений версии 7.2, особенно скоростью выполнения.
У меня была такая же проблема, когда я сменил cPanel с версии 5.4 на 7.2, когда я изменил ее на 7.1, все нормализовалось.
Если нет веских причин использовать версию 7.2, переключитесь на 7.1.
Надеюсь это поможет.
У меня была такая же ошибка!! Локально у меня это работало отлично, но при загрузке мне было представлено что-то похожее на это: Предупреждение: session_start(): Невозможно начать сеанс, когда заголовки уже отправлены... но я решил это, обновив версию PHP, которую я использовал 7.3 и ниже на 7.1, и вот как я смог исправить ошибку.