Проблема с <!DOCTYPE html> в PHP с помощью session_start()... Конфигурация Apache

Я столкнулся с проблемой, когда загрузил исходный код на хостинг.

На моих страницах HTML/PHP у меня есть код, подобный следующему:

<!DOCTYPE html>
<html lang = "es">

<?php
session_start();
....
....
?>

Если я запускаю страницу на своем локальном хосте с display_errors=On... я не получаю никаких ошибок для сеанса, но если я запускаю страницу на хостинге (с той же версией PHP), я получаю эту ошибку:

Warning: session_start(): Session cannot be started after headers have already been sent in

Эта ошибка не позволяет мне получить переменную $_SESSION, поэтому я не могу продолжить.

Я пытаюсь выполнить репликацию в своей локальной среде, но не могу настроить сервер на такое же поведение.

Я определил, как это решить (переместив <!DOC....> после команды session_start()), но мне хотелось бы понять, как воспроизвести эту проблему в моей среде.

Есть ли какая-либо конфигурация PHP.ini или Apache, которой мне не хватает в моей локальной среде?

Заранее спасибо.

Я пытался изменить параметры в PHP.ini, но мне не удалось воспроизвести поведение среды хостинга.

session должен стоять перед любым выводом браузера, это часть документации PHP. Помимо этого, есть ли у вас действительный session.save_path в вашем локальном файле .ini?
mitkosoft 28.05.2024 12:35

В вашей локальной среде, вероятно, для output_buffering установлено значение on (или определенное количество байтов), что предотвратит эту ошибку, поскольку заголовки отправляются только тогда, когда отправляется первый байт выходных данных, и благодаря его буферизации это не произойдет. произошли уже во время вызова session_start.

CBroe 28.05.2024 12:37

С уважением @CBroe, я умею копировать!!!

Firmo 28.05.2024 13:18

PHP даже не знает, что такое «<!DOCTYPE html>».

user3840170 28.05.2024 14:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
<?php
session_start();
?>
<!DOCTYPE html>
<html lang = "es">
<head>
    <meta charset = "UTF-8">
    <title>My Page</title>
    <!-- Other head elements -->
</head>
<body>
    <!-- Your content here -->
</body>
</html>

попробуйте этот код.

Примечание:

  1. Сеанс невозможно запустить после отправки заголовков. Это происходит, когда функция session_start() вызывается после отправки любого вывода в браузер. Сюда входят операторы HTML, пробелы или эхо, отправленные перед вызовом session_start().
  2. Убедитесь, что перед тегом <?php в верхней части файла нет пробелов или строк. Даже один пробел или разрыв строки может привести к преждевременной отправке заголовков.
  3. Убедитесь, что в конце файлов PHP нет закрывающих тегов PHP (?>). Если оставить тег PHP открытым в конце файла, это поможет предотвратить случайную отправку пробелов или новых строк на вывод.

Другие вопросы по теме