无法修改标头信息,标头已经发送

时间:2013-03-19 21:40:41

标签: php header

我有一个网页,其中包含以下代码;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">
<title>Search results</title>
<?php
include_once('filename.php');
$info = ptb_connect('filename.csv','F');
$locations = ptb_listUnique($info, 'Property_Location');
$property_type = ptb_listUnique($info, 'Property_Type');
$property_buy_rent = ptb_listUnique($info, 'Buy_Rent');

if(empty($_GET['location']) && empty($_GET['type']) && empty($_GET['buyrent']) && empty($_GET["min_val"]) && empty($_GET["room_no_min"])){
header("Location:propertysearch.php"); exit;
}

但是当我转到页面而不是重定向到propertysearch.php时,我收到消息“警告:无法修改标题信息 - 标题已经发送(输出从N开始:\ www \ test \ results.php:7)在N:\ www \ test \ results.php第15行“这是开始标题的行(”位置..

我尝试过很多方法来解决这个问题,包括消除空格,使用ob_start();等,但无法弄清楚。

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:3)

我希望这个答案可以帮到你:

要使用标题,必须在页面上的任何输出开始之前使用它。换句话说,它必须在任何打印之前出现,包括docytype。

使用的语法非常简单,在文件的最顶部打开php然后输入ob_start(),这就是输出缓冲:

<?php ob_start(); ?>

现在,您可以在页面的任何位置调用标题功能。要确保清除文件底部未使用的资源,请在php中键入ob_flush()来刷新缓冲区:

<?php ob_flush(); ?>

当我遇到一些问题时,这对我有用。希望这也会对你有帮助..

答案 1 :(得分:1)

我设法解决了这个问题,它是字节顺序标记问题,我将字符集从UTF-8更改为ISO西欧并解决了它。