无法修改标题信息 - 挡板
问题描述:
我得到了典型的'警告:不能修改标题信息 - 标题已经发送(输出开始...行14)'。这通常是由于header()方法之前的echo语句造成的,但令人困惑的是,在header()本身之前没有任何回声被调用。请你能告诉我输出的发生位置,以及为什么它目前让我困惑,并且进一步,所以我可以在将来解决这个问题。无法修改标题信息 - 挡板
第14行是内容的div中的一行:
<p>Lorem ipsum...</p>
在先进的感谢,
最大。
<html>
<head>
<title></title>
<!-- CSS -->
<link ... />
</head>
<body class="index not-admin">
<div id="wrapper">
<div id="logo"></div>
<div id="headerInvoice">
</div>
<div id="content">
<form name="signup" action="" method="GET">
<input name="email" type="email" placeholder="Email Address" />
<input type="submit" title="Submit!"/>
</form>
<?php
if($_SERVER['REQUEST_URI'] == '/betas/') {
header('Location:http://betas.maxk.me');
}
if (isset($_GET['email'])) {
$email = $_GET['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = 'Email Address is invalid.';
}
else {
mysql_connect('localhost', '...', '...');
mysql_select_db('...');
$email = mysql_real_escape_string($email);
if (mysql_num_rows(mysql_query("SELECT * FROM testers WHERE `email_address` = '$email'")) < 1) {
mysql_query("INSERT INTO `testers` (`email_address`,`accepted`) VALUES ('$email','0')");
$error = !mysql_error()? 'Success!' : "We came across an error, please try again! " . mysql_error();
}
else {
$error = 'Sorry, but you have already signed up! Please try emailing me to see if I need any testers through my <a href="http://maxk.me">homepage</a>.';
}
}
echo $error;
}
?>
<br />
<a href="#">Login</a>
</div>
<div id="footer">
</div>
</div>
</body>
</html>
答
的问题是在这里:
if($_SERVER['request_URI'] == '/betas/') {
header('Location:http://betas.maxk.me');
}
调用header
在文件中的任何HTML后会导致错误。 The PHP documentation深入解释了这一点。
答
这不仅适用于echo
具体。 <?php
标签之外的任何内容也会散发出来,并会导致此问题。
答
您应该将您的重定向代码放在文件的顶部,而不是嵌入其中,因为HTML已经在那个位置输出。
E.g.此行之前
<?php
if($_SERVER['REQUEST_URI'] == '/betas/') {
header('Location:http://betas.maxk.me');
}
?>
<html>
...
答
一切:
<?php
if($_SERVER['REQUEST_URI'] == '/betas/') {
header('Location:http://betas.maxk.me');
// .. etc
计数作为输出。当您拨打header()
时,一大堆内容已经发送到输出。你也许可以用ob_*
函数捕获它,但我敢打赌有一个更好的解决方案。
答
开头PHP标签之前的所有HTML都被视为正在发送的数据,因此您需要在您的文件顶部正好位于HTML代码之上的PHP头语句。
答
任何不在<?php ?>
标记内的标记都会以与echo
语句相同的方式处理,并在脚本中直接发送到浏览器。任何呼叫(或涉及HTTP标头的任何内容)必须来自第一个PHP块。请注意,文件开头处的空格也会导致此问题。
你知道你没有关闭你的第一个 steveoh 2012-03-06 23:19:19