0

重複の可能性:
PHP によって既に送信されたヘッダー

この問題は解決しましたが、原因がわからないため、本当に解決したかどうかはわかりません。

私の PHP サイトでは、ログインする前にホームページに最新のアクティビティが表示されます。最近、より多くの種類のアクティビティを含めるようにロジックを変更しました。動作しているように見えましたが、ログイン時に次のエラーが発生しました。

Warning: Cannot modify header information - headers already sent by
(output started at header.php:75)
in index.php on line 26

ホームページに表示されるアクティビティを取得する MySQL クエリで「LIMIT 10」を「LIMIT 9」に変更することで修正したため、このエラー メッセージは誤解を招くと思います。

    public function getLatestActivity()
{
    $sql = "SELECT 'Debate' AS Type, d.Debate_ID AS ID, CONCAT('debate.php?debate_id=', d.Debate_ID) AS URL, d.Title, d.Add_Date
        FROM debates d

        UNION SELECT 'Discussion' AS Type, d.Discussion_ID AS ID, CONCAT('discussion.php?discussion_id=', d.Discussion_ID) AS URL, d.Title, d.Add_Date
        FROM discussions d

        UNION SELECT 'Petition' AS Type, p.Petition_ID AS ID, CONCAT('petition.php?petition_id=', p.Petition_ID) AS URL, p.Petition_Title AS Title, p.Add_Date
        FROM petitions p

        ORDER BY Add_Date DESC
        LIMIT 9";

    try
    {
        $stmt = $this->_db->prepare($sql);
        $stmt->execute();
        $activity = array();
        while ($row = $stmt->fetch())
        {
            $activity[] = '<span style="font-size: x-large"><strong>Latest activity</strong></span><br /><span style="font-size: large">' . $row['Type'] . ': <span style="color: #900"><a href="' . $row['URL'] . '" style="color: #900">' . $row['Title'] . '</a></span></span>';
        }
        $stmt->closeCursor();

        return $activity;
    }
    catch(PDOException $e)
    {
        return FALSE;
    }
}

そして、その関数によって返されたデータで私がしていることは次のとおりです。配列をループし、4 秒ごとに新しいアイテムを表示します。

    <?php $latest_activity = $pdb->getLatestActivity(); ?>
<script type="text/javascript">
    var activity = <?php echo json_encode($latest_activity);  ?>;
    var index = -1;
    $(function()
    {
        getLatestActivity();
    });
    function getLatestActivity()
    {
        index = (index + 1) % activity.length;
        var div = document.getElementById('divLatestActivity');
        if (index < activity.length)
        {
            div.innerHTML = activity[index];
        }
        setTimeout("getLatestActivity()", 4000);
    }
</script>

「LIMIT 10」を「LIMIT 9」に変更すると、「ヘッダー情報を変更できない」問題が修正されたのはなぜですか?

4

2 に答える 2

0

PHP では、header() 関数 (つまり、header("Location:login.php"); を使用して login.php ページにリダイレクトする) を使用する場合、ブラウザにテキストを出力する可能性のある他のコードの前に実行する必要があります。

//this will CAUSE a warning
echo "Login now";
session_start()
header("content-type:text/html");
header("cache-control:max-age=3600");

でも...

//this will NOT CAUSES a warning
header("content-type:text/html");
header("cache-control:max-age=3600");
session_start();
echo "Login now";

したがって、session_start() または header() ディレクティブを実行するコードを調べて、echo ""; がないことを確認してください。彼らの前に。session_start() または header() の前にページにスローされる MySQL 警告がある場合、この警告も発生します。

于 2012-12-30T03:11:18.803 に答える
0

一部の出力がエコー、印刷、または HTML の形式で行われたかどうかを確認する必要があります。これが行われている場合、header("LOCATION: login.php") はエラーをスローします。

これを克服する方法は、出力バッファリングを使用することです。

ob_start();

于 2012-12-30T03:14:56.927 に答える