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

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),您有很多选择:

  • HTML: [meta http-equiv="refresh" content="5;url=http://site/create_csv.php"]
  • 使用Javascript: location.href = 'http://site/create_csv.php';
  • IFRAME: [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等,但它可以工作.


Óla*_*age 9

您要发送的标头是HTTP标头.浏览器将其作为页面请求并将其作为页面处理.在您的情况下,它需要下载一个页面.

因此,添加重定向标头会混淆整个下载文件的过程(因为标题被收集,生成一个标题然后发送到浏览器,您可以通过设置多个重定向标题IIRC来尝试这一点)