PHP generate file for download then redirect PHP generate file for download then redirect php php

PHP generate file for download then redirect


I don't think this can be done - although I am not 100% sure.

The common thing (e.g. in popular download sites) is the reverse: first you go to the after page and then the download starts.

So redirect your users to the final page that (among other things) says:

Your download should start automatically. If not click [a href="create_csv.php"]here[/a].

As about initiating the download (e.g. automatically calling create_csv.php) you have many options:

  • 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]


very easy to do in the case it is really needed.

But you will need to have a bit work in JavaScript and cookies:

in PHP you should add setting up a cookie

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

then on the page where you call the download you should track with JS (e.g. once per second) if there is coming cookie like that (there is used plugin jQuery cookie here):

setInterval(function(){  if ($.cookie("fileLoading")) {    // clean the cookie for future downoads    $.removeCookie("fileLoading");    //redirect    location.href = "/newpage";  }},1000);

Now if the file starts to be downoaded JS recognizes it and redirects to the page needed after cookie is deleted.

Of course, you can tell you need browser to accept cookies, JavaScript and so on, but it works.


The header you are sending are HTTP headers. The browser takes that as a page request and processes it as a page. And in your case, a page it needs to download.

So adding a redirect header to that confuses the whole process of downloading the file (since headers are collected, generated into one header and then sent to the browser, you can try this by setting multiple redirect headers IIRC)