我想在用户下载文件时重命名文件。下载文件时重命名文件
现在,我发送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