Возможный дубликат:
Заголовки, уже отправленные PHP
Я получаю ошибки о «уже отправленных заголовках», когда я успешно вхожу на страницу.
Вот мой код, который касается входа:
<?php include("config.php"); $eUsername = $_POST['username']; $ePassword = $_POST['password']; $con = mysql_connect("localhost","MY_USERNAME","MY_PASSWORD"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("forum", $con); $result = mysql_query("SELECT * FROM members WHERE username = '$eUsername'"); while($row = mysql_fetch_array($result)) { if ($ePassword==$row['password']) { echo "Correct"; setcookie("loggedIn", "true", time()+1000000000); setcookie("logUsername", "$eUsername", time()+100000000); setcookie("logPassword", "$ePassword", time()+100000000); } else { echo "Incorrect username/password. Please try again."; } } mysql_close($con); if ($_COOKIE['loggedIn']=="true") { $curURL=basename($_SERVER['SCRIPT_NAME']); echo "You are already logged in. <a href='$curURL?lo=true'>Log out?</a>"; } echo "<br /><br />"; print_r($_COOKIE); ?>
Таким образом, в основном, что это значит, если вы входите в систему с правильной информацией, он установит три файла cookie, ваше имя пользователя, пароль и один, чтобы проверить наличие двух других.
Но когда я вхожу в систему успешно, я получаю следующие ошибки:
Предупреждение. Невозможно изменить информацию заголовка – уже отправленные заголовки (вывод начат в /home/scott/web/forum/index.php:18) в /home/scott/web/forum/index.php в строке 19
Предупреждение. Невозможно изменить информацию заголовка – уже отправленные заголовки (вывод запущен в /home/scott/web/forum/index.php:18) в /home/scott/web/forum/index.php в строке 20
Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные (вывод запущен в /home/scott/web/forum/index.php:18) в /home/scott/web/forum/index.php в строке 21
Что я делаю не так?
У вас есть эхо, которое может произойти до вашего вызова setcookie
.
header
или setcookie
или что-либо еще, отправляющее заголовки HTTP, должно выполняться перед любым другим выходом, или вы получите это предупреждение / ошибку.
Кроме того, вы должны проверить config.php, чтобы убедиться, что после закрывающего ?>
Php-тега нет конечных пробелов. Помните … все, что не включено в <?php ... ?>
, Рассматривается как результат анализатора php, и выйдет «echo'd».
Хорошо, это может быть глупо – я даже не вникал в ваш код – но это пробел перед открытием <?php
? Кроме того, я бы проверить config.php
чтобы убедиться, что нет пробелов вне открывающих и закрывающих тегов.
Похоже, проблема возникает, когда вы устанавливаете cookie сеанса. Возможно, вы хотите проверить, существуют ли они до того, как вы их установили, и если они существуют, предпримите другие действия.
Вы пишете «Исправить» в выходной поток перед настройкой файлов cookie. Когда вы начинаете писать на страницу, сначала записываются заголовки HTML. Когда файлы cookie попадают в заголовок, вы должны установить их перед началом записи на страницу.