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 开关)。
我正在使用这段代码将文件 (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 开关)。