首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP -无法修改标头信息

PHP -无法修改标头信息
EN

Stack Overflow用户
提问于 2010-12-24 06:47:42
回答 3查看 4.8K关注 0票数 0

这个错误让我发疯了:无法修改标题信息-已经由.

请注意,我知道关于google和堆栈溢出的大量结果。我的问题是我构建网页的方式。为了使html与php分离,我使用了include文件。例如,我的页面看起来是这样的:

代码语言:javascript
复制
<?php 
require_once('web.config.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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<link rel="shortcut icon" href="images/favicon.gif"/>
<link rel="shortcut icon" href="images/favicon.ico"/>
<link rel="stylesheet" type="text/css" href="<?php echo SITE_STYLE; ?>"/>
</head>
<body>
<div id="page_effect" style="display:none;">
<?php require_once('./controls/login/login.control.php'); ?>
</div>
</body>
</html>

因此,当我的php文件被包含时,报头已经发送了。

包含文件的一部分如下所示:

代码语言:javascript
复制
// redirect to destination
if($user_redirect != 'default')
{
    header('Location:'.$user_redirect);
}
elseif($user_redirect == 'default' && isset($_GET['ReturnURL']))
{
    $destination_url = $_GET['ReturnURL'];
    header('Location:'.$destination_url);
}
else
{
    header('Location:'.SITE_URL.'login.php');
}

但我想不出怎么解决这个问题。我不能在输出之前重定向头,所以让输出缓冲是我唯一能做的事情。当然,它的工作方式很好--但不得不依赖它只是臭气熏天。

如果PHP有一种替代的方法来重定向,或者有额外的参数告诉它清除缓冲区,那就太好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-24 06:53:56

header语句之前有回显/打印语句吗?这可能会导致这个错误。

票数 1
EN

Stack Overflow用户

发布于 2010-12-24 06:53:56

关键不是将PHP与HTML分开,而是将表示与处理分开。根据应用程序的状态重定向是处理的一部分。先做好。

票数 2
EN

Stack Overflow用户

发布于 2010-12-24 06:50:54

就像你说的,问题在于你如何组织你的页面。

在输出页面之前,您应该处理身份验证逻辑(和其他逻辑)。不管怎么说,这会让你的安全度更高。

正如您现在可能知道的,您不应该依赖于输出缓冲,因为该缓冲区的大小可能会发生变化,并且在登录之前您拥有的内容将随模板而改变,即使启用了输出缓冲,也会导致不可靠的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4524698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档