setcookie, Невозможно изменить информацию заголовка – уже отправленные заголовки

Я новичок в PHP, я практиковал PHP setcookie () только сейчас и не смог.

http: // localhost / test / index.php

<!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> 

http: // localhost / test / view.php

 <?php // I plan to view the cookie value via view.php echo $_COOKIE["TestCookie"]; ?> 

Но мне не удалось запустить index.php, предупреждение IE, подобное этому.

 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:9) in C:\xampp\htdocs\test\index.php on line 12 

Я включил свой cookie IE 6 без сомнения.

Что-то не так в моей процедуре выше? Спасибо.

Используются WinXP OS и XAMPP 1.7.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 должны быть отправлены до выхода из вашего скрипта (это ограничение протокола). Это требует, чтобы вы отправляли вызовы этой функции до любого вывода, включая теги <html> и <head> а также любые пробелы.

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

 <?php $value = 'something from somewhere'; setcookie("TestCookie", $value); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> .... 

Куки-файлы отправляются в заголовках передачи 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 .

Или просто поверните

 output_buffering = On 

в вашем php.ini

Обратитесь к http://digitalpbk.com/php/warning-cannot-modify-header-information-headers-already-sent для полного решения

Вы отправляете 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> 

Вот что стоит посмотреть …

У меня была такая же проблема, и я обнаружил, что после закрытия ?> SPACE закрылся ?> В конце файла я включил его в правильное место перед созданием какого-либо результата. Это сводило меня с ума!