PHP生成文件以供下载,然后重定向

2022-08-30 09:06:11

我有一个PHP应用程序,可以创建一个CSV文件,该文件强制使用标头下载。以下是代码的相关部分:

header('Content-Type: application/csv'); 
header("Content-length: " . filesize($NewFile)); 
header('Content-Disposition: attachment; filename="' . $FileName . '"'); 
echo $content;
exit(); 

我想做的是在构建文件并发送下载提示后将用户重定向到新页面。只是添加到最后不起作用,意料之中,所以我不确定如何操纵它。header("Location: /newpage")


答案 1

我不认为这可以做到 - 尽管我不是100%确定。

常见的事情(例如在流行的下载站点中)是相反的:首先你转到一页,然后下载开始。

因此,将您的用户重定向到最终页面,该页面(除其他内容外)显示:

您的下载应自动开始。如果不是,请单击 。[a href="create_csv.php"]here[/a]

至于启动下载(例如,自动调用create_csv.php),您有很多选择:

  • 网页:[meta http-equiv="refresh" content="5;url=http://site/create_csv.php"]
  • Javascript:location.href = 'http://site/create_csv.php';
  • 内联框架:[iframe src="create_csv.php"][/iframe]

答案 2

在真正需要的情况下非常容易做到。

但是你需要在JavaScript和cookie上做一些工作:

在PHP中,您应该添加设置cookie

header('Set-Cookie: fileLoading=true'); 

然后在您调用下载的页面上,如果有这样的cookie(这里有使用的插件jQuery cookie),您应该使用JS进行跟踪(例如每秒一次):

setInterval(function(){
  if ($.cookie("fileLoading")) {
    // clean the cookie for future downoads
    $.removeCookie("fileLoading");

    //redirect
    location.href = "/newpage";
  }
},1000);

现在,如果文件开始被下载,JS会识别它并重定向到删除cookie后所需的页面。

当然,你可以告诉你需要浏览器接受cookie,JavaScript等,但它是有效的。


推荐