php - 是否可以在 readfile() 之后重定向页面?

标签 php

是否可以在 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/

相关文章:

php - URL 重定向到另一个域的子域

php - 临时表创建

php - 需要一个用于 drupal 的多条件搜索表单

php - 从主机访问 docker 回答 curl : (56) Recv failure: Connection reset by peer

php - mysql-如何使用循环选择id

javascript - jQuery 在 div 鼠标悬停时更改输入值

javascript - 通过单击图像将 1 求和到一个值 - PHP

php - Memcache 间歇性错误

php - exec() 没有按预期工作

php - 通过将用户 ID 传递给模态框向用户发送消息