PHP标头不会在iframe中重定向,不会显示错误

时间:2012-01-29 20:18:21

标签: php iframe redirect header

我有一个iframe执行一些服务器端工作并显示图像。我们使用iframe来动态显示图像。用户点击上传图片,我们会显示微调器,然后使用新图片重新加载iframe。我的目标是避免在用户通过“后退”按钮进入页面时显示的确认表单重新提交页面。

本质上,作为iframe的src的页面是一个php文件,它检查三个条件:

1)名为redirect的变量是否设置?如果是这样,'urldecode()',并将其用作img src。

2)文件上传了吗?如果是这样,将其保存到数据库,并将图像路径重定向到此页面作为GET变量

header('Location : mypage?redirect=path%2Fto%2Fimg.jpg'); 
die('upload');

3)什么都没上传?抓取我们从db获取的内容,然后将路径重定向到此页面作为GET变量

header('Location : mypage?redirect=path%2Fto%2Fimg.jpg'); 
die('default'); 

我们在父页面中的内容是

<iframe id='myframe' src='mypage.php'>

问题是,我们永远不会得到重定向。该页面确实已经消失,因此我们会在upload调用中看到一个带有defaultdie()字符串的白色方块,而不是个人资料图片。

在iframe中使用header()时,它的行为是否正常?我希望它重定向iframe的内容。

感谢您的时间。

4 个答案:

答案 0 :(得分:4)

我刚刚在我的测试环境中复制了这个。您的标头不正确,Location:

之间不应有空格

<强>作品

header('Location: mypage?redirect=path%2Fto%2Fimg.jpg'); 
die('default'); 

不起作用

header('Location : mypage?redirect=path%2Fto%2Fimg.jpg'); 
die('default'); 

答案 1 :(得分:2)

避免表单重新提交的最佳方法是在提交后使用重定向。而不是在POST后直接处理数据,您应该重定向用户浏览器。请查看此文档以获取更多信息:

http://en.wikipedia.org/wiki/Post/Redirect/Get

您还可能遇到特定浏览器和/或缓存的问题。尝试添加这些标头以避免缓存问题:

header(“Cache-Control:no-cache,must-revalidate”); // HTTP / 1.1

header(“Expires:Sat,1997年7月26日05:00:00 GMT”); //过去的日期

答案 2 :(得分:1)

如果我对你所做的事情是正确的,我会做以下事情:

无重定向,只是<img src="path_to_img.jpg" />,其中path_to_img.jpg是$_GET["redirect"]的变量,或者如果出现问题,则基于此。

没有IFrame ,但是PHP include()

答案 3 :(得分:0)

除了“额外空间”问题, PHP的标题(位置)在iframe内无效

(我找不到这个记录,但我自己也在苦苦挣扎,所以写了一个虚拟脚本来测试它,这是真的)。​​

工作:当被称为“独立”时,会重定向到Google

<?php
header ('Location: http://www.google.com/');
exit ();
?>

无效:在iframe中加载上述脚本时

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>test</title>
    <meta name="author" content="Neil Hillman">
</head>
<body>

<iframe src='./redirect.php'
    id='redirect'
    name='redirect'
    height='500'
    scrolling='auto'
    style='border: 1px solid grey;'>
</iframe>

</body>
</html>

自己尝试一下!