setcookie, не Может изменить информацию заголовка - заголовки, уже отправленные, [копируют]

36
задан VolkerK 17 April 2010 в 11:06
поделиться

3 ответа

Предупреждение ясно.

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с C: \ xampp \ htdocs \ test \ index.php: 9) в C: \ xampp \ htdocs \ test \ index.php в строке 12

Файлы cookie отправляются в заголовке ответа HTTP. Поскольку содержимое HTML уже запущено, вы не можете вернуться к заголовку и добавить файл cookie.

Из http://php.net/setcookie :

setcookie () определяет cookie, отправляемый вместе с остальными заголовками HTTP. Как и другие заголовки, файлы cookie должны быть отправлены до любого вывода из вашего скрипта (это ограничение протокола). Это требует, чтобы вы вызывали эту функцию до любого вывода, включая теги и , а также любые пробелы.

Переместите этот оператор setcookie до появления любого HTML:

<?php
 $value = 'something from somewhere';

 setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
....
51
ответ дан 27 November 2019 в 05:27
поделиться

Вы отправляете HTML-код перед установкой файла cookie. Файл cookie должен быть установлен перед отправкой любого вывода, поскольку он отправляется с заголовками ответа. Сделайте следующее:

<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>

    </head>
    <body>

    </body>
</html>
7
ответ дан 27 November 2019 в 05:27
поделиться

Файлы cookie отправляются в заголовках передачи HTTP-страницы. Как только вы дадите какой-то результат, вы больше не сможете его изменять.

Проблема в вашем случае заключается в том, что вы выводите часть HTML-документа до того, как пытаетесь установить cookie.

Есть несколько способов решить эту проблему; один из которых устанавливает cookie перед выводом чего-либо на страницу, например, так

<?php
    $value = 'something from somewhere';
    setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>

    </head>
    <body>

    </body>
</html>

В качестве альтернативы, вы можете буферизовать свой вывод, чтобы ничего не записывалось, пока вы явно не сообщите об этом

<?php
    ob_start(); // Initiate the output buffer
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>

    </head>
    <body>
     <?php
         $value = 'something from somewhere';
         setcookie("TestCookie", $value);
     ?>
    </body>
</html>
<?php
    ob_end_flush(); // Flush the output from the buffer
?>

. Для получения дополнительной информации об этом последнем подходе воспользуйтесь посмотрите функции ob_start и ob_end_flush .

Было бы полезно прочитать о setcookie .

23
ответ дан 27 November 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: