Eva*_*van 60 php redirect header
我有一个PHP应用程序,它创建一个CSV文件,强制使用标题下载.这是代码的相关部分:
header('Content-Type: application/csv');
header("Content-length: " . filesize($NewFile));
header('Content-Disposition: attachment; filename="' . $FileName . '"');
echo $content;
exit();
Run Code Online (Sandbox Code Playgroud)
我想做的是在构建文件并发送下载提示后将用户重定向到新页面.到目前为止,添加header("Location: /newpage")到最后都没有用,所以我不知道如何解决这个问题.
dar*_*mon 83
我不认为这可以做到 - 虽然我不是100%肯定.
常见的事情(例如在流行的下载站点中)是相反的:首先,您转到后页,然后开始下载.
因此,将用户重定向到最终页面(其中包括):
您的下载应自动开始.如果没有点击[a href="create_csv.php"]here[/a].
至于启动下载(例如自动调用create_csv.php),您有很多选择:
[meta http-equiv="refresh" content="5;url=http://site/create_csv.php"]location.href = 'http://site/create_csv.php';[iframe src="create_csv.php"][/iframe]smn*_*brv 10
在真正需要的情况下很容易做到.
但是你需要在JavaScript和cookie中做一些工作:
在PHP中,您应该添加设置cookie
header('Set-Cookie: fileLoading=true');
Run Code Online (Sandbox Code Playgroud)
然后在您调用下载的页面上,您应该使用JS跟踪(例如每秒一次),如果有类似的cookie(这里使用了插件jQuery cookie):
setInterval(function(){
if ($.cookie("fileLoading")) {
// clean the cookie for future downoads
$.removeCookie("fileLoading");
//redirect
location.href = "/newpage";
}
},1000);
Run Code Online (Sandbox Code Playgroud)
现在,如果文件开始被下载,JS会识别它并重定向到删除cookie后所需的页面.
当然,您可以告诉您需要浏览器接受cookie,JavaScript等,但它可以工作.
您要发送的标头是HTTP标头.浏览器将其作为页面请求并将其作为页面处理.在您的情况下,它需要下载一个页面.
因此,添加重定向标头会混淆整个下载文件的过程(因为标题被收集,生成一个标题然后发送到浏览器,您可以通过设置多个重定向标题IIRC来尝试这一点)