基于 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 页面不起作用;标头已发送错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章