为什么include()不允许工作setcookie?

时间:2010-04-08 10:33:45

标签: php

我需要在我的页面中设置cookie,但它会返回

Warning: Cannot modify header information - headers already sent by (output started at /home1/bsam/public_html/24kadr/index.php:1) in /home1/bsam/public_html/24kadr/basic_login.php  on line 35

在第1行我有

include 'basic_login.php'; 

但即使我删除了include,ir也会在session_start或mysql_connect上返回相同的警告。 所以我认为这些所有功能在通话时都使用标题,但我该怎么办?至少我需要连接数据库,就在它之后我需要使用setcookie()。 那我该怎么办? 感谢

更新index.php的第一行

<?include 'basic_login.php';include 'settings.php';?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
...........
<_>在basic_login.php中启动

<?
session_start();
include 'connect.php';
ini_set("session.bug_compat_42",1);
ini_set("session.bug_compat_warn",0);

..........................................

setcookie("cookname", $_SESSION['username'], time()+60*60*24*30, "/");
setcookie("cookpass", $_SESSION['password'], time()+60*60*24*30, "/");

3 个答案:

答案 0 :(得分:6)

在开幕/24kadr/index.php之前,您很可能在<?php中有空格。删除它,它应该没问题。

如果没有空格,可能您的PHP文件使用Byte Order Mark(BOM)保存。在这种情况下,让编辑器在没有它的情况下保存文件。

答案 1 :(得分:2)

如果在设置标头/ cookie之前输出任何内容,则会出现此错误。在输出任何内容之前执行此操作,甚至是空行,或使用output buffering

答案 2 :(得分:0)

如果您确定您的文件 /24kadr/index.php

开头
<?php

之前没有一个字符,您可能会遇到“带BOM的UTF-8”问题

如果您的编辑器配置为使用编码“UTF-8 with BOM”保存文件,那么它将在文件的开头添加(而不是显示)2个特殊字符。

这可能导致PHP发出警告。

我希望这会有所帮助 杰罗姆·瓦格纳