setcookie () всегда терпит неудачу "заголовки уже отправлены", даже следуя правилам на php.net - PullRequest
0 голосов
/ 23 августа 2010

Соответствующий фрагмент кода ниже.Согласно php.net я должен убедиться, что нет выходных данных, даже пробелов.Там нет ни одного.Тег php - это самый первый тег в документе, перед которым нет пробелов.Что я делаю не так?

<?php

    // main.php
    // 6:48 PM 8/6/2010

    include('config.php');

    // Does myid cookie exist?
    if ( !isset( $_COOKIE['myid'] ) )
    {
        // Generate myid
        $myid = substr(md5(date( 'Ymdhis' ) . str_replace( '.', '', $_SERVER['REMOTE_ADDR'] ) ), 0, 10);

        // set the cookie
        setcookie( 'myid', $myid, time() + 31536000 );

Ответы [ 3 ]

0 голосов
/ 23 августа 2010

Некоторые текстовые редакторы отображают не все символы.Пожалуйста, попробуйте открыть ваши main.php и config.php в разных редакторах и проверить что-то перед

0 голосов
/ 23 августа 2010

Вы не можете прочитать или хотя бы вставить это сообщение об ошибке здесь. В нем ПОДРОБНОЕ объяснение, что ты делаешь не так.
скорее всего, он сказал бы, что вывод начался в config.php: XXX. Довольно ясно.

, если в нем говорится, что вывод начался с main.php: 0 - это, скорее всего, символ BOM , и вам придется повторно сохранять файл без него, используя диалоговое окно «Сохранить» редактора или другой редактор.

Всегда читайте все сообщение об ошибке. Это не только говорит о том, что что-то пошло не так, но часто объясняет, что именно произошло.

0 голосов
/ 23 августа 2010

Должен быть никакой вывод вообще перед вызовом setcookie, даже из других сценариев.

Если config.php имел пробел перед открывающим тегом <?php (или посленапример, закрытие ?>), которое может вызвать проблему.

Выискивать, где вызывается header или существует некоторый текст вне тегов PHP (даже с пробелами).Это то, что происходит, без сомнения.

...