2010-07-29 115 views
1

index.php页面代码是 -无法修改标题信息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()); 

?> 

但followong警告消息coming- 警告:不能更改头信息 - 头已经在第4行的C:\ xampp \ htdocs \ pics \ index.php中发送(输出开始于C:\ xampp \ htdocs \ pics \ index.php:1)

+0

看看http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/ – 2010-07-29 08:13:11

+0

你有没有任何空白打开<?php或者您的文件是否有BOM表头? – 2010-07-29 08:13:11

+0

哪里是BOM? – nectar 2010-07-29 08:21:30

回答

4

从维基百科条目BOM报价:

字节顺序标记

许多Windows程序(包括 Windows记事本)在保存为UTF-8的任何 文档的开始处添加字节0xEF, 0xBB,0xBF。这是Unicode字节 订购标记(BOM)的UTF-8编码,并且通常是 (称为UTF-8 BOM),即使 它与字节顺序无关。如果使用BOM编码的另一个 转换为 UTF-8而没有将其剥离,则也会显示 BOM。

的UTF-8 BOM的存在可能会导致与 现有的软件,可以以其他方式处理UTF-8,例如互操作性问题:

+旧版的文本编辑器可以显示BOM为“ “在文档开始时,即使UTF-8文件仅包含ASCII,否则会正确显示。
+编程语言解析器通常可以在字符串常量和注释中处理UTF-8,但不能在文件开始时解析BOM。

0

您是否尝试删除文件顶部的所有空白?

像这样:

<?php 
if(!$_COOKIE['authorized'] == 1) { 
header("Location: login.php"); 
} ?> 

祝你好运;)

5

<?php

+0

不,没有任何空白空间。你的BOM是什么意思? – nectar 2010-07-29 08:28:58

0

在谷歌小的搜索确保没有空格(包括BOM或换行符): http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/

1)找到hea der()声明是 导致该问题。此行或之前的错误必须是 。

2)查找可能在此 头语句之前发送输出给用户的任何语句。如果您发现一个或多个 ,请找到某种方法将标题 前面的语句移到其中。复杂 有条件的陈述可能会使 复杂化的问题,但他们也可能帮助 解决问题。考虑在 顶部的 条件表达式,该脚本尽早确定 标题值, 将其设置在那里。

3)确保php开始和结束标记之外没有空白 。 虽然<?php 开始标记之前的空白行看起来可能无辜,但当PHP处理 时,它会变成打印空白 行的 回显语句。这是一个常见的罪魁祸首。

+0

错误消息说明在index.php的第1行处输出的确切位置。这是<?php行 – 2010-07-29 08:16:53

+0

感谢马克,你是对的 – 2010-07-29 08:17:50

0

您可能必须在一个空格开头的

 <?php 

标签之前

1

还要确保在这之前运行任何代码,在一个单独的文件可以同时具有<?php -opening和?> - 关闭。

如果一个脚本在te ?> -closing标签之后以空格运行(例如,因为愚蠢的编辑谁在那里放行结束),PHP将开始在那里发送输出。

只需在文件末尾省略?>即可。如果PHP到达文件的末尾,并且它没有?>,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()); 

没有结束>

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,不会再出现警告消息。 另一个需要注意的重点是,页面的第一行&必须是5个字符的PHP开始标记(<?php)。之后,如果没有任何空白字符,请按Enter,并用分号提供功能“ob_start()”。在那之后,无论你想要什么,你都可以写作,而不用担心会得到那种歪理邪恶的警告信息。

同样在整个代码的末尾,你可以调用这个PHP函数“ob_end_flush()”来刷新整个输出缓冲区。但是,如果不使用这个函数,代码也可以工作,因为默认情况下,PHP会在网页处理结束时输出输出缓冲区的所有内容。

希望它有帮助。

相关问题