簡體   English   中英

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 的一部分,我無法輕松/自由編輯。

我正在尋找PHP解決方案或指南。

這個問題的答案是@ADyson在上面的評論:

« “並重新加載當前的php頁面” ...您無法執行此操作,只有瀏覽器可以在這種情況下執行此操作。 您已經以文件下載的形式對請求做出了回應。 從服務器“重新加載當前頁面”的唯一方法是發送一些新的HTML供瀏覽器顯示。 但是您不能通過文件下載和HTML文檔來響應單個HTTP請求。 這在物理上是不可能的。 您已經設置了標頭,向瀏覽器指示響應是要下載的文件。 »

因此,這是HTTP限制。 我們無法進行多部分響應。

在提交表格(或任何將您帶到下載頁面的內容)之前,請使用 javascript 顯示 sg。 像“文件下載,按確定”和一個按鈕。 它會保留,因為沒有要加載的 HTML 內容。 設置此按鈕以再次加載您的下載頁面,但這次跳過文件下載標頭(使用 get 開關)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM