繁体   English   中英

即使遵循php.net上的规则,setcookie()始终会失败“标头已发送”

[英]setcookie() always fails “headers already sent” even following the rules on php.net

相关的代码如下。 根据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 );

调用setcookie之前根本不需要输出 ,即使从其他脚本也是如此。

例如,如果config.php在打开<?php标记之前(或在关闭?> )具有空格,则可能会引起问题。

搜寻header被调用的地方或存在PHP标记(甚至空格)之外的文本的地方。 毫无疑问,这就是正在发生的事情。

某些文本编辑器不会显示所有符号。 请尝试在不同的编辑器中打开main.php和config.php,并检查两个文件中<?php之前的内容。 我说不清Windows,但是在Linux上您可以使用vimvi 另外,完整的错误消息会告诉您确切的错误从哪里开始。

您无法阅读或至少将此错误消息粘贴到此处。 它有详细的解释,您在做什么错。
最有可能说输出开始于config.php:XXX。 很清楚

如果显示输出从main.php:0开始-这很可能是BOM字符,并且您必须使用编辑器的“保存”对话框或其他编辑器重新保存不带该文件的文件。

始终阅读完整的错误消息。 它不仅说明发生了什么问题,而且经常说明发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM