PHP无法setcookie

ste*_*nvh 1 php cookies

我是PHP处女(第一天),所以请慢慢输入.

我有许多图像,bg_001.jpg,bg_002.jpg等,我想在每次刷新页面时旋转它们.我试过这个:

if (isset($_COOKIE["bg1"])) {
  $img_no = $_COOKIE["bg1"] + 1;
} else {
  $img_no = 1;
}
$filename = 'bg_' . sprintf("%03d", $img_no) . '.jpg';
if (!file_exists("/img/" . $filename)) {
  $img_no = 1;
  $filename = 'bg_' . sprintf("%03d", $img_no) . '.jpg';
}
setcookie("bg1", $img_no, time() + 86400);
print '<img src="img/' . $filename . '" alt="" height="175" width="800"> '; 
Run Code Online (Sandbox Code Playgroud)

而不是cookie我得到了

Warning: Cannot modify header information - headers already sent by (output 
started at /home2/.../about.php:7) in /home2/.../about.php on line 31
Run Code Online (Sandbox Code Playgroud)

第31行是setcookie的行.我已经发现有关PHP的指针有关于Unicode的BOM的问题,但我不知道如何解决它(如果这是首先出现的问题).因此,为了使其正式(并避免"不是真正的问题"标签),我该如何解决这个问题?:-)

对我的代码的建设性批评也是受欢迎的.

结语:
看起来像一个常见的新手错误:在十五分钟内对同一解决方案的几个答案.谢谢guyz/galz.

所以我把除了print之外的所有东西都移到了文件的开头,确实:固定了.

Szt*_*upY 8

如果之前没有发送任何信息,则只能发送cookie.这意味着PHP文件中的第一件事必须是<?php,并且在该部分之前没有任何东西可以得到(甚至不是可怕的UTF-8 BOM),因为如果有东西在第一个之前<?php(比如<html>),那么php将发送这些数据浏览器和数据发送后你不能使用setcookie.重构您的代码看起来像这样:

<?php
 (...)
 setcookie(...)
 (...)
?>
<HTML>
(...)
</HTML>

并仔细检查记事本等编辑器是否<?php在文件中的第一个之前没有放置任何UTF-8 BOM签名.