我想在用戶下載文件時重命名文件。下載文件時重命名文件
現在,我發送content-disposition和content-length頭文件,然後用fpassthru PHP函數向用戶發送文件。
但有3個問題用這種方法:
- 如果我要送大(以上3-4GB)文件這樣,那麼我的PHP腳本運行了太多的時間,並且可以通過超時被殺死。
- 如果用戶取消下載,PHP腳本繼續讀取併發送文件
- 如果用戶暫停下載,他不能在以後恢復。
有沒有更好的方法來重命名下載文件?
我想在用戶下載文件時重命名文件。下載文件時重命名文件
現在,我發送content-disposition和content-length頭文件,然後用fpassthru PHP函數向用戶發送文件。
但有3個問題用這種方法:
有沒有更好的方法來重命名下載文件?
<?php
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
僞代碼
while(1) {
Echo "..."; //<-- send this to the client
if (connection_status()!=0){
die;
}
}
可以停止PHP腳本如果用戶通過使用connection_status()
HTTP不能重新連接一個取消該瀏覽器關閉連接。 FTP可以!
對於第三點,您可以嘗試使用HTTP Range標題。
如果用戶擁有支持簡歷的下載客戶端,它應該將這些頭文件發送到您的腳本,您可以使用該腳本精確確定要發送的文件的哪些部分。
既然有人問,一段時間已經過去,並html5
給了我們一個不同的方法來這樣:
<a href="someWeiredFileName.rar" download="coolFilename.rar">Download</a>
的attribute
下載(learn more)定義了默認filename
存儲上的文件客戶端電腦(他仍然可以改變它!)。
注意:這不會影響您服務器上的任何內容。
有趣的是,這可以避免大量的服務器端代碼,但不適用於舊版Chap IE。 – 2013-11-19 17:28:31
@RienNeVaPlus,它適用於Windows系統,但不適用於Linux系統。任何想法我們如何才能實現它的Linux系統? – kalidasan 2015-10-06 14:10:38
太好了。這正是我現在所做的,只使用fpassthru函數而不是readfile。 但是您的解決方案將如何幫助解決我指出的三個問題? – Boffin 2009-11-26 01:34:37