PHP头信息(header())无法正常工作

3

有人知道为什么我的header()无法重定向吗?

我脚本的最后部分是:

  header("location: test.php");
  die('died');

它写道:

died.

:(((

这段代码应该在它死之前进行重定向,但实际上没有进行重定向。

你有任何想法吗?


我该怎么做呢?只需简单地点击反馈是或否即可吗? - szatti1489
2
在PHP中打开error_reporting、error_level等...,你很可能会得到一个“无法发送标头 - 输出已经开始于第XXX行”的错误。 - Marc B
1
@mario,这不是downvotes的本意。既然你喜欢链接到FAQ,这里也有一个给你...Downvoting应该保留给极端情况。它不是沟通和编辑的替代品。哦,我会删除我的答案,虽然它实际上帮助他解决了问题,但违反了标准。 - Matt K
@mario 然后为发帖人留下评论以扩展更多内容...我们不是来让初学者在发布问题时感到不舒服的。你认为每个人都天生知道“headers-already-sent”问题吗?如果有什么不清楚的地方,就请多要求细节,让他们参与进来,而不是开始贬低投票。 - Matt K
请查看以下链接:http://stackoverflow.com/questions/13419110/header-does-not-work-on-my-server - Alpha
显示剩余2条评论
9个回答

15

你可能是在向浏览器输出一些文本/HTML之后再调用了header()方法,这是不可取的。如果在调用header()之前已经向浏览器发送了任何输出,即使只有一个空格,你的header()方法也会被忽略。

换句话说,你的header()代码需要放在脚本的开头,在显示任何东西给用户之前调用。如果仍然无法正常工作,请确保你没有错误地在php标签外使用任何空格或其他空白符号。


3
也许在 header 之前有一些不可见的输出,导致无法设置 header,并且错误信息被禁止显示。此外,Location-Headers 应该包含绝对 URL:
// Show Errors
error_reporting(E_ALL);
ini_set('display_errors','On');
// Redirect
header('Location: http://example.com/path/test.php');
die('redirect');

2

在设置位置头时,应使用完全限定地址,不要输出任何内容:

header('Location: http://example.com/test.php');
die();

此外,确保在设置头部之前未发送其他内容,否则它将不会被发送,因为头部已经被发送到浏览器。


0

添加

ob_start();

之前

header("location: test.php");

0

在原问题中,die()函数在header()之前被执行。
我遇到了类似的问题,所以我创建了下面的代码进行测试。

header("Location:index.php");

$file = fopen("test.txt","a");
fwrite($file,date("Y-m-d H:i:s")."\n");
fclose($file);

然后呢?好吧,在header()函数之后呈现的代码被执行,只有在header()返回到index.php页面之后才会执行。

所有这些都是为了说明header()函数可以在脚本末尾用于引用另一个脚本。
但是要小心,如果将其放置在脚本开头,它不能阻止脚本运行。


0
如果包含“header()”指令的文件直接或间接地在HTML文件中被引用,那么指令{include 'someFile'}应该是该HTML文件的第一行。将此指令放置在HTML文件的顶部,如this image.所示。

0

location: 应该改为 Location:

此外...

  • 滚动到页面顶部。
  • 点击您的账户名字。
  • 点击一个随机问题。
  • 勾选一个随机答案。
  • 返回查找更多严肃的答案。

祝好运。


亲爱的MattK,当你编写代码长时间并创建了长长的代码时,在演示之前关闭错误报告,当然f..头文件也没有重定向,尽管f...回显为空字符串...在这种情况下你会怎么做? - szatti1489

0

我也曾遇到这个错误,尝试使用error_reporting(E_ALL)来显示错误信息,但对我没有用。补充一下:我是在Strato上使用托管服务。

解决方案由Floem提供,感谢他的出色设置。

如果您在放置error_reporting(E_ALL)时从未收到错误,那么您必须另外添加ini_set('display_errors', 'On'),以强制PHP显示所有错误。这解决了我的错误问题。

然后,您可以查看为什么PHP无法进行重定向。我的建议是:如果您要经常使用此重定向,则应构建一个小型重定向类,如此视频所示:Redirect Class for easy use


0

只需删除 PHP 标签之前的所有内容即可解决问题。

删除 PHP 标签之前的空格

选择标签之前的所有内容,然后按删除键。


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