PHP头部函数无效

3
我曾经使用这个函数将一个php页面重定向到另一个页面:
header( 'Location: student.php?cnp='.$_REQUEST['name']) ;

在我的本地主机上它可以工作,但如果在互联网上测试,它就不能重定向。我也尝试了给出完整路径(如http://.../student.php?...),但仍然不能正常工作。有谁知道为什么以及我该怎么做?


你收到任何错误信息了吗?也许是“无法修改头信息 - 头部已经被发送...”? - user895378
没有...它只是停留在同一页上! - Madrugada
3
请查看您的错误日志 - Ayman Safadi
1
你是否在头部语句后立即退出脚本? - Mark Baker
1
@madrugada:阅读错误消息。在调用header()之前,您不能进行任何输出,否则会出现警告和失败的标头。 - Marc B
显示剩余7条评论
6个回答

6
试试这个:
header('Location: http://www.example.com/someurl.php', true);

第二个参数可以替换之前的位置标头(如果有)。

还要检查您收到的HTTP响应代码(应为30X)

如果什么都不起作用,您总可以通过JavaScript重定向:

echo "<script>window.top.location='http://www.example.com/someurl.php'</script>"

这可能不是很专业,但即便头信息已发送也可以使用。

谢谢大家,它起作用了。很奇怪,但在这里看了一下[1],我发现在 <?php 之前和 ?> 之后不应该有任何空格。[1]http://forum.mamboserver.com/showthread.php?t=49427 - Madrugada
我知道这是一个老问题,但我来到这里,我假设其他人也会遇到同样的问题。我遇到了同样的问题,但提供的解决方案没有帮助。经过一小时的搜索,我发现我的同事使用不同的编辑器修改了文件,改变了编码为'UTF8 with BOM'。在以这种编码发送location header和 index.php时,就不能运行了。将其转换回UTF8(无BOM)后,一切都像以前一样正常运行。我希望这些信息可以帮助其他人节省时间。 - Jonas

3
尝试在session_write_close();之前和exit()之后添加:
session_write_close();

header( 'Location: student.php?cnp='.$_REQUEST['name']) ;

exit();

刚才在评论中看到了错误信息。在你的页面顶部添加ob_start();,如果你使用了session_start(),则应该在其下方添加。


我没有任何会话...我还需要添加你说的内容吗? - Madrugada
1
是的,你应该仍然添加它。将其放在你的主文件顶部。 - Tim

0

你的header()不起作用是因为头文件已经发送到浏览器。在页面开头使用ob_start()(即使在DOCTYPE声明之前),并在结尾处使用ob_end_flush()


0

我刚遇到了同样的问题,这个建议对我有用。将此函数放在您的代码顶部:

function move_to(){
header('Location: student.php?cnp='.$_REQUEST['name']);
}

并且可以在任何地方使用以下方式调用该函数:

move_to()

顺便说一下,我不会为此而取得荣誉。我只是在这里找到了它:Header function not working PHP

0

我尝试了这个解决方案,但它没有起作用

header('Location: http://www.example.com/someurl.php', true);

所以我建议大家尝试以下两种可能的解决方案,这对我来说很有效。

使用JS

echo "<script>window.top.location='http://www.example.com/someurl.php'</script>"

使用META

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=http://www.example.com/someurl.php">';

这两个方法对我都有效。但是由于某些原因,头部标签在网络上无法正常工作,但在本地可以完美运行。我将使用meta解决方案。


0

试试这个 www.psychocodes.in

<?php
ob_start();

//more code
header("Location:URL");

ob_end_flush();
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接