基于 header(location) 命令重定向 php 页面不起作用;标头已发送错误[重复]

Posted

技术标签:

【中文标题】基于 header(location) 命令重定向 php 页面不起作用;标头已发送错误[重复]【英文标题】:Redirecting a php page based on header(location) command not working; headers already sent error [duplicate] 【发布时间】:2011-08-31 04:35:15 【问题描述】:

更新 我已经修改了这个脚本,但它不能正常工作,但我仍然很困惑。

我所做的是,我已经在原始脚本中注释掉了这部分,现在我没有得到标题已经发送的消息:

/*  
include("include_db_connection.php");
$sessionid = session_id();
$update_sessiondetails_query =  "UPDATE t_session SET logout_time=now() WHERE session_id='" .$sessionid. "'";

$update_sessiondetails_result = mysqli_query($db_conn, $update_sessiondetails_query) 
or die('Connected to database, but querying failed');
*/

但我不明白的是,这里没有回声或打印,我所做的只是在连接到数据库后更新数据库。在标题()之前不允许这样做......??!如果不允许这样做,我还有什么选择?无论如何,我都必须使用用户注销时间来更新数据库!

再次感谢!

下面的原始问题和脚本 -

嗨,

我正在处理我的注销脚本,但无法成功完成此脚本,因为我收到标头已发送以下代码的警告 -

这是我的注销脚本 -

<?php
session_start();

include("db_connection.php");   //gets the database connection details like username/host
$sessionid = session_id();      //gets the current logged in user's session ID
$update_sessiondetails_query =  "UPDATE t_session SET logout_time=now() WHERE session_id='" .$sessionid. "'";               //update the database for this user by inserting the logout time

$update_sessiondetails_result = mysqli_query($db_conn, $update_sessiondetails_query) 
or die('Connected to database, but querying failed');

session_unset(); 
session_destroy(); 
                                 // if session uses cookies, clear all cookies
if (ini_get("session.use_cookies")) 
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]);

                                //once scripts completes successfully, redirect user to some other page
$homepage_url = "somepage.php";                     
header('Location: '. $homepage_url);

?>

这是我得到的错误 - 警告:无法修改标头信息 - 标头已由(输出开始于...blah blah blah...)

请让我知道为什么会出现此错误。 注意:在我的本地机器上使用 WAMP 工作时,注销脚本工作正常并且不会给出任何错误或警告(这些在 wamp 中未设置为 OFF);仅当我使用在线虚拟主机进行测试时才会收到这些警告。

谢谢!

【问题讨论】:

您正在将某些内容打印到页眉并尝试再次设置它。在 header('Location: '.$homepage_url);你显示任何文字吗?回声,打印,死亡等......?在标题推荐之前打印到屏幕上的任何内容都会导致此错误 @phillpafford:我在 page1.php 中做了很多事情,比如回显和查询等。logout.php 链接在这个页面中。单击 logout.php 时,我收到标题警告消息。现在,这个 logout.php 脚本中没有 echo 语句或任何其他打印内容。我在我的问题中复制了完整的注销脚本。这是唯一的内容。 【参考方案1】:

在页面上设置 cookie 时 重定向,必须设置 cookie 在调用 header('Location: ....');

如:

<?php 
header('Location: http://www.example.com/'); 
setcookie('asite', $site, time()+60*60, '/', 'site.com'); 
?>

来源:http://us.php.net/manual/en/function.setcookie.php#96251

【讨论】:

我更改了脚本中 cookie 部分的顺序,并将 cookie 设置在 header() 之后,如您所说,但我仍然收到相同的错误/警告【参考方案2】:

这意味着已经输出了一些东西。此文件或以前包含的文件的开头或结尾可能有尾随空格或换行符。

【讨论】:

是因为我的 header() 出现在这个脚本的底部吗?我是否在这个特定脚本中的这个函数之前发送了一些标题?所有这些在我当地的沼泽地都运行良好。这让我很困惑。 您可能在本地 wamp 而不是服务器上默认打开了输出缓冲。 Imo,在您的配置文件、数据库连接文件等中寻找前导/尾随空格。

以上是关于基于 header(location) 命令重定向 php 页面不起作用;标头已发送错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

header("Location: url") 不重定向

尝试使用 PHP Header("Location: ") 函数重定向

header头部信息

php常用header状态

重定向保持哈希

PHP 301 重定向位置 URI 格式