PHP 5.3.3 : 从服务器下载文件并继续执行脚本

PHP 5.3.3 : Download file from server and continue script execution

我正在使用这段代码将文件 (path_facture_name) 从服务器下载到客户端浏览器:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($path_facture_name) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($path_facture_name));
ob_clean();
flush();
readfile($path_facture_name);
ob_end_flush();
# ----
# Some other PHP code
# ----

这很好用,但是当文件下载时,脚本结束,Some other PHP code 部分将永远不会执行。

所以,我的问题是,是否有更好的方法从服务器下载文件,而不中止下一部分代码的执行?

我已尝试使用 <iframe>JavaScript 代码将 window 重定向到将处理下载的同一个 .php 文件。但这没有用,因为我想添加的这个功能是一个 18 岁的复杂 php CRM 的一部分,我无法 easily/freely 编辑。

我正在寻找 PHP 解决方案或指南。

这个问题的答案是@ADyson上面的评论:

« "and reload the current php page"...你不能那样做,只有浏览器在这种情况下才能那样做。您已经以文件下载的形式给出了对请求的响应。从服务器 "reload the current page" 的唯一方法是发送一些新的 HTML 供浏览器显示。但是您不能同时使用文件下载和 HTML 文档来响应单个 HTTP 请求。这在物理上是不可能的。您已经设置 headers 向浏览器指示响应是要下载的文件。 »

所以这是一个 HTTP 限制。我们无法做出 multi-part 回应。

在提交表单(或任何将您带到下载页面的内容)之前,使用 javascript 显示 sg。像“文件下载,按确定”和一个按钮。它将保留,因为没有要加载的 HTML 内容。 设置此按钮以再次加载您的下载页面,但这次跳过文件下载 headers(使用 get 开关)。