我的index.php
网页代码是 -
<?php
if(!$_COOKIE['authorized'] == 1) {
header("Location: login.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My Photo Website</title>
<script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script>
<script src="js/jquery.lightbox-0.5.pack.js" type="text/javascript"></script>
<script src="js/myscript.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/default.css" />
<link rel="stylesheet" href="css/jquery.lightbox-0.5.css" />
</head>
<body>
<form method="post" action="changePhotoTitle.php">
<div id="container">
<h1>My Photos <small>click on the text to change the title.</small></h1>
<a href="login.php?logout=1" id="logout">logout</a>
<div id="main">
<?php require 'getPhotos.php'; ?>
<div id="response" class="hidden" />
</div><!-- end main-->
</div><!-- end container-->
</form>
</body>
</html>
我的database.php页面代码是 -
<?php
$db_name = "db";
$db_server = "localhost";
$db_user = "root";
$db_pass = "";
$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error());
?>
但随后的警告信息即将来临 - 警告:无法修改标头信息 - 已在第4行的C:\ xampp \ htdocs \ pics \ index.php中发送的标头(输出从C:\ xampp \ htdocs \ pics \ index.php:1开始)< /强>
答案 0 :(得分:5)
确保<?php
答案 1 :(得分:4)
从维基百科条目中引用BOM:
字节顺序标记
许多Windows程序(包括 Windows Notepad)添加字节0xEF, 任何开头的0xBB,0xBF 文件保存为UTF-8。这是 Unicode字节的UTF-8编码 订单标记(BOM),通常是 尽管如此称为UTF-8 BOM 它与字节顺序无关。该 BOM也可以出现另一个 带有BOM的编码被翻译成 UTF-8没有剥离它。
UTF-8 BOM的存在可能会导致互操作性问题 现有的软件,否则可以处理UTF-8,例如:
+ 旧版本的文本编辑器可能会在文档开头显示“ï»”,即使UTF-8文件只包含ASCII,否则会正确显示。
+ 编程语言解析器通常可以在字符串常量和注释中处理UTF-8,但无法解析文件开头的BOM。
答案 2 :(得分:1)
另外,请确保在单独的文件中运行的任何代码都可能同时包含<?php
- 开放和?>
- 关闭。
如果在te ?>
之后运行带有空格的脚本 - 结束标记(例如,由于那些将行结尾放在那里的愚蠢的编辑器),PHP将开始在那里发送输出。
简单地省略任何?&gt;在文件的末尾。如果PHP到达文件的末尾,并且它没有?&gt ;,那么PHP将在那里结束PHPmode。这是一个记录的PHP功能。
因此,您可以按如下方式重写database.php
<?php
$db_name = "db";
$db_server = "localhost";
$db_user = "root";
$db_pass = "";
$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error());
没有结束?&gt;
答案 3 :(得分:0)
您是否尝试删除文件顶部的所有空格?
像这样:
<?php
if(!$_COOKIE['authorized'] == 1) {
header("Location: login.php");
} ?>
祝你好运;)
答案 4 :(得分:0)
google中的小搜索: http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/
1)找到 header()语句 造成这个问题。错误必须是 在此行或之前。
2)寻找可能的任何陈述 在此之前将输出发送给用户 标题声明。如果你找到一个或 更多,找到一些移动标题的方法 他们面前的陈述。复杂 条件陈述可能会复杂化 问题,但他们也可能有所帮助 解决这个问题。考虑一下 顶部的条件表达式 确定的PHP脚本 标头值尽早和 把它放在那里。
3)确保没有空白区域 在php开始和结束标记之外。
<?php
之前的空白行 开始标记可能看起来无辜,何时 由PHP处理,它将变成一个 echo语句打印出一个空白 线。这是一个常见的罪魁祸首。
答案 5 :(得分:0)
您可能在
之前的开头有空格 <?php
标签
答案 6 :(得分:0)
我还有其他一些不错的解决方案。
<?php
ob_start();
if(!$_COOKIE['authorized'] == 1) {
header("Location: login.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- Rest of the code follows here -->
主要问题是您尚未启动OB(输出缓冲)。启动OB后,不会再出现警告消息。 需要注意的另一个重点是第一排&amp;页面的第一列必须是5个字符的PHP开始标记(<?php
)。之后没有任何空白字符,按Enter键,并以分号提供“ob_start()
”函数。在那之后无论你想要什么,你都可以写作,而不必担心会收到那些歪曲的警告信息。
同样在整个代码的末尾,您可以调用此PHP函数“ob_end_flush()
”来刷新整个输出缓冲区。但是,如果不使用此函数,代码也可以工作,因为默认情况下,PHP会在网页处理结束时输出输出缓冲区的所有内容。
希望它有所帮助。