[英]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 的一部分,我無法輕松/自由編輯。
我正在尋找PHP
解決方案或指南。
這個問題的答案是@ADyson在上面的評論:
« “並重新加載當前的php頁面” ...您無法執行此操作,只有瀏覽器可以在這種情況下執行此操作。 您已經以文件下載的形式對請求做出了回應。 從服務器“重新加載當前頁面”的唯一方法是發送一些新的HTML供瀏覽器顯示。 但是您不能通過文件下載和HTML文檔來響應單個HTTP請求。 這在物理上是不可能的。 您已經設置了標頭,向瀏覽器指示響應是要下載的文件。 »
因此,這是HTTP
限制。 我們無法進行多部分響應。
在提交表格(或任何將您帶到下載頁面的內容)之前,請使用 javascript 顯示 sg。 像“文件下載,按確定”和一個按鈕。 它會保留,因為沒有要加載的 HTML 內容。 設置此按鈕以再次加載您的下載頁面,但這次跳過文件下載標頭(使用 get 開關)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.