setcookie, başlık bilgileri değiştirilemiyor - başlıklar zaten [yinelenen] gönderdi

5 Cevap php

Bu soru burada zaten bir cevabı var:

5 Cevap

Uyarı açıktır.

Uyarı: başlık bilgileri değiştirilemiyor - zaten tarafından gönderilen başlıklar (çıkış C'de başladı: \ xampp \ htdocs \ test \ index.php: 9) C: satırında 12 \ xampp \ htdocs \ test \ index.php

Çerezler HTTP cevap başlığında gönderilir. HTML içeriği zaten başladığımdan bu yana, geri başlığına gidin ve tanımlama bilgisi eklemek olamaz.

Dan http://php.net/setcookie:

setcookie() HTTP üstbilgileri kalanı ile birlikte gönderilmek üzere bir çerez tanımlar. Diğer başlıklar gibi, çerezler gönderilmesi gerekir before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> ve <head> yanı sıra herhangi bir boşluk etiketleri.

Herhangi bir HTML belirmesi o setcookie deyimi taşıyın:

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

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

Çerezler HTTP sayfanın iletim başlıklarında gönderilir. Bazı çıkış vermek sonra, artık bu değişiklik yapamazsınız.

Sizin durumunuzda sorun çerez ayarlamak denemeden önce HTML belgenin bazı çıkış yatıyor.

Bunu çözmek için bir kaç yolu vardır; bir önceki böylece gibi sayfada herhangi bir şey çıktısı için çerez ayarlıyor

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

Açıkça bunu söylemek kadar hiçbir şey yazılı olur böylece Alternatif olarak, size çıkış tampon olabilir

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

Bu son yaklaşım hakkında daha fazla bilgi için, bir ob_start bakmak ve ob_end_flush fonksiyonlarını alır.

Bu da, setcookie hakkında okumak yararlı olabilir.

Eğer çerez ayarlamadan önce bazı HTML yolluyorlar. Bu yanıt başlıklarından gönderilir gibi çerez, herhangi bir çıktı göndermeden önce ayarlanmış olmalıdır. Bunu yapın:

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

Ya da sadece dönüş

output_buffering = On

Lütfen php.ini olarak

http://digitalpbk.com/php/warning-cannot-modify-header-information-headers-already-sent tam bir çözüm için başvurun

İşte için dışarı bakarak değer bir şey ...

Ben aynı sorunu vardı ve bir UZAY herhangi bir çıkış elde ediliyordu önce ben doğru yerde içeren bir dosyanın sonundaki kapanış ?> sonra orada bulundu. Bu beni deli sürüş oldu!