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


Can not modify header information, header already sent

我有一个网页,有以下代码;

<!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行",这是开始的行header("Location..

我已经尝试了很多事情来尝试解决这个问题,包括消除空白,使用ob_start();

我希望这个答案能对你有所帮助:

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

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

<?php ob_start(); ?>

现在你可以在页面的任何地方调用标题函数。为了确保清除文件底部未使用的资源,可以在php:

中键入ob_flush()来刷新缓冲区
<?php ob_flush(); ?>

当我遇到一些问题时,这对我很有效。

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