Php 标题警告
可能的重复项:Php 标题警告,php,Php,可能的重复项: 我最近从Bluehost购买了一个托管计划,并将我的网站移到了这里。以前,我的网站正常工作,我没有收到任何错误,但现在,当我尝试登录时,我收到了以下错误: 警告:无法修改标题信息-标题已由第84行/home/rugbyspi/public_html/inc/offline_header.php:15)中的/home/rugbyspi/public_html/index.php发送 问题是header函数。我想我不能在代码中间使用这个函数,但在我的另一台主机上我可以这样做。 你
我最近从Bluehost购买了一个托管计划,并将我的网站移到了这里。以前,我的网站正常工作,我没有收到任何错误,但现在,当我尝试登录时,我收到了以下错误: 警告:无法修改标题信息-标题已由第84行/home/rugbyspi/public_html/inc/offline_header.php:15)中的/home/rugbyspi/public_html/index.php发送 问题是header函数。我想我不能在代码中间使用这个函数,但在我的另一台主机上我可以这样做。 你知道怎么解决这个问题吗
<?php
session_start();
if (isset($_SESSION['username'])) {
include_once('inc/homepage_header.php');
include_once('lib/stats_func.php');
include_once('lib/user_time_func.php');
update_last_active($username);
?>
<div id="right_menu">
<?php include_once('inc/sidebar_statistics.php'); ?>
<br/>
<?php include_once('inc/sidebar_follow.php'); ?>
</div>
<div id="content">
<div class="text">
<br/>
<h2 class="hr"><?php echo $lang['ann']; ?></h2>
<?php
if(!isset($_REQUEST["start"])) {
$start = 0;
}
else {
$start = $_REQUEST["start"];
}
$query = mysql_query ("SELECT * from news where lang='$language'")
or die ("Couldn't connect to the do database.");
$d=0;
$f=0;
$g=1;
$query = mysql_query ("SELECT * from news where lang='$language' order by id DESC Limit $start, 7") or die ("Couldn't connect to the do database.");
while($news = mysql_fetch_array($query)) {
?>
<h3 class="hr"><font size=1><?php echo $news['tsubmit']; ?></font> <?php echo $news['title']; ?></h3>
<?php
echo $news['body'];
}
echo "<br/><br/><br/>";
echo $lang['pages'] . ': ';
while($order = mysql_fetch_array($query)) {
if($f%7==0) {
echo "<a href='index.php?start=$d'>$g</a>";
$g++;
}
$d++;
$f++;
}
?>
</div>
</div>
<?php
include_once('inc/footer.php');
}
else {
include_once('inc/offline_header.php');
include_once('lib/stats_func.php');
?>
<div id="right_menu">
<?php include_once('inc/sidebar_statistics.php'); ?>
<br/>
<?php include_once('inc/sidebar_follow.php'); ?>
</div>
<div id="content">
<div class="text">
<br/>
<?php echo $lang['welcome']; ?>
<br/><br/>
<?php
if (isset($_POST['submit'])) {
$username = $_POST ['username'];
$password = $_POST ['password'];
$username = strip_tags ($username);
$password = md5 ($password);
mysql_real_escape_string($username);
$query = mysql_query ("SELECT id FROM users WHERE username='$username' AND password='$password'")
or die ("Couldn't connect to the do database.") ;
$result = mysql_fetch_array($query);
if($result) {
$_SESSION['username'] = $username;
header('Location: index.php');
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else {
$ip=$_SERVER['REMOTE_ADDR'];
}
$time = time();
mysql_query ("INSERT into logins (userid, time, ip)
VALUES ('$result[id]', '$time', '$ip')")
or die ("Couldn't connect to the database.");
}
else {
echo $lang['login_error'];
}
echo '<br/><br/>';
}
?>
<h2 class="hr"><?php echo $lang['about']; ?></h2>
<?php echo $lang['intro']; ?>
</div>
</div>
<?php
}
include_once('inc/footer.php');
?>
在开始会话之前,必须有一些回显文本。请尝试在会话\u start()
之前删除任何输出,或将该函数移动到离线\u header.php如果您在错误生成文件的前15行提供了代码,那就太好了。
无论如何,这个错误是由于在调用session_start()或其他header()函数之前完成的输出造成的
不管它是否是您的输出(如echo、print等),它也可以是错误消息(注意、警告)的输出,该消息可以在以前的主机上关闭,但现在它们出现在您调用某些头函数之前
您应该检查第15行的代码,以及所有代码,然后再检查它是否生成错误或是否有直接输出
希望有帮助。如错误所示,一旦发送了标题,您就无法修改标题信息(这是标题
函数所做的)。标题在您第一次输出文本时被发送
在第84行之前,您有许多输出文本的地方(例如第61、63和65行),并且您包含的文件中可能有更多的机会。这意味着您不能在这些行之前使用header函数,或者可能在该else
分支中的任何include调用之前使用header函数
你应该重新构造你的代码,把
if (isset($_POST['submit'])) {...
作为else
分支的第一件事,在知道查询是否成功之前,不要输出任何html或其他文本,以便知道是否要重定向到索引页。这是这里最常见的问题,原因总是一样的。请在提问前阅读。@deceze请在结束前阅读。据我所知,他知道问题出在哪里。他在问最好的处理方法。因此,如果您有类似的问题,请与他人分享,但不要链接“标题已发送”的一般问题,因为这些问题没有实际用途。@Alin答案总是一样的:在内容输出后不要启动会话。这个问题已经用几乎所有可能的形式回答过很多次了。@deceze我相信以前已经回答过了,但请给出一个例子。“内容输出后不要启动会话”可能不像听起来那么容易,至少在他的情况下是这样。@Alin:不在乎。如果OP懒得使用搜索,为什么我要搜索一个好的副本?还有,你投票了吗?请看问题。他知道错误在哪里以及原因。他在问下一步该怎么办。另外,如果你看一看,你会发现PHP在这里被用作嵌入式语言,所以输出到处都是,而不是因为错误或遗漏了空格。@Alin:他只是想,他不确定。。。在调用header()之前,我给了他一个搜索内容的线索-输出或通知/警告。。。这就是他应该做的。有些输出必须在其他文件中完成,而不是在提供的文件中完成-错误是由session_start()引起的,但第一个输出可能在第15行的脱机_header.php中…第一个输出在主文件
:)中。由于以前的输出,当无法设置头时会出现错误。如果错误在第2行,我会同意。错误发生在第84行,因此与启动会话无关-1.