是否可以在 readfile() 之后重定向页面?
我尝试使用 Header,但这不起作用。元重定向也不起作用:
header ("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=$file");
header("Content-Length: $size");
readfile($file_path); // Giving file to the customer
// header('Location:../checkout.php'); Doesn't work
// echo ('<meta http-equiv="refresh" content="1;url=../checkout.php">'); Doesn't work
最佳答案
输出文件后不可能输出文件头。标题需要先行(因此得名)。如果您会在输出文件之前输出 header ,浏览器将可以自由地忽略正文。我不确定浏览器实际上 做什么,但我怀疑重定向和 文件下载是否会同时启动。一个或另一个可能会被忽略。
基本事实:除了文件下载所必需的信息外,您不能在与文件下载相同的响应中输出任何信息。文件下载响应的 header 只能包含有关文件的信息,响应正文只能包含文件(即没有 <meta>
刷新等,它们将成为文件的一部分)。
为了说明,这将是浏览器接收到的内容:
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename=foo
Content-Length: 42
woieufhm23umh29… (file contents as binary gibberish) …cQ3985fno1rHtn3f
qo8923r10d30<meta http-equiv="refresh" content="1;url=../checkout.php">
第一个空行之后的所有内容都将保存为文件内容,包括 <meta>
标签。您实际上会通过在其中输出任何其他内容来损坏该文件。
这通常的工作方式是向用户呈现一个“下载页面”,该页面具有自动刷新元标记和/或 Javascript,它首先启动下载,然后在第二次刷新时重定向。
关于php - 是否可以在 readfile() 之后重定向页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304153/