2013-07-10 1 views
1

я испытать Предупреждение: Не удается добавить информацию в заголовке - заголовки уже отправлены при попытке разместить header()session_start() или setcookie() после echo или каких-либо HTML наценки. Но когда я обновил PHP на своем локальном сервере до 5.4.7 (in XAMPP 1.8.1), я больше не сталкиваюсь с этим предупреждением. Это нормально для PHP 5.4.X?PHP 5.4.X способен размещать setcookie() после разметки HTML без предупреждения «Заголовки уже отправлены»?

Я попытался размещения setcookie() после некоторых текстов и echo в этом примере:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>Cookie Test</title> 
</head> 
<body> 
<h1>Cookie Test</h1> 
<?php 
    if (isset($_COOKIE['test'])) { 
     echo "<p>{$_COOKIE['test']}</p>"; 
    } else { 
     echo "<p>No cookie..</p>"; 
     setcookie('test', 'You have a cookie!', time()+300, '/'); 
    } 
?> 
</body> 
</html> 

Затем я открываю страницу с помощью локального хоста/что-page.php и обновить ..

Cookie Test

У вас есть печенье!

В моей тестовой среде setcookie() работает нормально, без предупреждения. Что-то не так с моими настройками? Спасибо.

Win7x64 и XAMPP 1.8.1 использовал

+0

ли вам есть вызов 'ob_start()' где-то? 5.4, ​​конечно, не изменил протокол HTTP. – ceejayoz

+2

должен иметь выходную буферизацию, включенную по умолчанию. in in 'output_buffering =" on "' – Orangepill

+1

Только что отмечен в моем ini, что 'output_buffering = 4096'. Спасибо @Orangepill :) .. Как я могу пометить этот вопрос, как он решил? – weeix

ответ

2

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

Это может быть сделано в ряде способов

В файле конфигурации с

output_buffering = On 

или

В HTAccess/httpd.conf с

php_flag output_buffering On 
+0

Я забыл, что это может быть в конфиге. Хороший звонок. – ceejayoz