首页 / 知识
关于php:启动下载的最佳方法?
2023-04-15 05:20:00

Best way to initiate a download?在一个基于PHP的网站上,我想在用户填写简短表格后向他们发送下载包。 该网站启动的下载应类似于download.com之类的网站,该网站表示"您的下载将很快开始"。 我知道几种可能的方法,以及浏览器的兼容性(基于快速测试):
1)进行
2)创建一个指向新文件的iframe。
好处:有没有不需要浏览器条件语句的方法? (我相信download.com有条件地采用了这两种方法,但我无法使用其中任何一种。) 回应和说明:
更新:我已经放弃了这种方法。 请参阅以下我的答案,以了解原因。 您还可以执行大多数浏览器支持的元刷新。 Download.com将一个放在noscript标记中。
更新:我决定放弃这种方法,而只是向用户提供指向实际文件的链接。我的理由是这样的: 我最初尝试由服务器启动的下载被浏览器阻止了。那让我想到:"浏览器是正确的。它怎么知道这是合法的下载?它应该阻止显然不是用户启动的下载。" 我可以用于服务器启动的下载的任何方法也可以由想要发送恶意软件的人使用。因此,仅当用户通过单击链接专门请求文件时,才应进行下载。 您可以自由地不同意,如果仍然要启动下载,希望该线程可以帮助您完成下载。 我通常只有一个PHP脚本,可以使用适当的Content-Type将文件直接输出到浏览器
唯一的缺点是,由于它设置了HTTP标头,因此必须先调用它,然后再输出任何其他输出。 但是您可以具有指向PHP下载页面的链接,这将使浏览器弹出一个下载框,而不会弄乱当前页面的内容。 i!
@内森:
让浏览器本身直接进行文件认为正确的操作。与我一起在Opera中这也可以正常工作。 但是,在不允许直接访问文件的环境中,这将是一个问题,在这种情况下,您将不得不寻找另一种方式! (感谢Discordia,我的文件是公共PDF!) 最好的问候,Basty 一个陷阱是,如果未正确设置标头,则可能会遇到IE问题(尤其是版本6)。 确保设置正确的Content-Type,但也要考虑(至少)设置IE的"缓存"选项以允许缓存。如果文件是一个文件,则用户可以打开而不是保存文件(例如MS Word文档),因此IE的早期版本需要缓存文件,因为他们将"打开"请求传递给适用的应用程序,并指向已下载的文件。在缓存中。 还有一个相关的问题,如果IE6用户的缓存已满,它将无法正确保存文件(因此,当适用的应用程序获得打开它的权柄时,它将抱怨文件已损坏。 您可能还想对下载进行任何gzip操作(对于IE) IE6 / IE7都存在下载量过大的问题(例如4.x Gigs ...),因为IE甚至没有下载管理器,但有一点需要注意。 最后,如果IE6是从嵌套iframe中启动的,则有时无法很好地处理下载"推送"。我不确定是什么引发了该问题,但是我发现使用IE6可以更轻松地避免这种情况。 您可以使用Javascript / jQuery启动下载。 这是一个示例-您可以摆脱Ajax请求,而只需使用setTimeout()块。
保存下载后,当前页面不受影响。 只要确保下载未在同一窗口(正确的MIME类型或 查看更多完整答案 总结一下,您有2个目标: 为此,我将执行以下操作:
当您的用户提交表单时,他将显示带有捐赠选项的结果页面,并显示一条文字,说明下载将在5秒钟内开始。在此页面的开头部分,您按照Soldarnal的说法放入了META代码: 我一直只是制作一个指向该文件的iframe。
如何更改位置以指向新文件? (例如,通过更改window.location) |
最新内容
相关内容
linux命令暂停下载?
linux命令暂停下载?,系统,代码,暂停,第一,服务,管理,命令,进程,程序,接线,linux下nginx停止命令首先,连接相应linux主机,进入到linux命令行状态linux命令中添加用户?
linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文件夹,linux添加用户名1、打开xshell软件,远程访问您的服务器或虚拟linux的u盘启动命令?
linux的u盘启动命令?,系统,电脑,工具,信息,软件,网上,名称,工作,设备,通用,从U盘启动linux系统1、在启动界面上选择启动 Linux,进入安装界面。linux命令下载jdk?
linux命令下载jdk?,官网,系统,地址,工作,工具,服务,管理,环境,网上,地方,怎样在Linux系统中下载和安装OpenJDK包手动安装jdk,首先需要下载jdk,记linux中的下载命令行?
linux中的下载命令行?,软件,系统,网络,电脑,名称,密码,官网,位置,服务,代理,linux命令行下的ftp多文件下载和目录下载查看是否安装vsftpd,如果linux防火墙命令启动?
linux防火墙命令启动?,系统,状态,管理,密码,服务,工具,防火墙,网络,信息,软件,如何在Linux中启动/停止和启用/禁用FirewallD和Iptables防火墙linux命令给用户授权?
linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,linux怎样给普通用户设置权限添加用户 添加账号就是在系统中创建linux命令行大全下载?
linux命令行大全下载?,系统,地址,工作,信息,管理,技术,命令,名家,评论,数据,《Linux命令行大全》pdf下载在线阅读,求百度网盘云资源1、本书是linux命令创建用户组?
linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管理,Linux中如何创建用户和用户组linux一条命令不能创建多个用户组linux启动显示命令行?
linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,linux,按了ctrl+alt+F1,进入了类似纯命令行的界面,让输入login信linux命令下载jdk?
linux命令下载jdk?,官网,系统,地址,工作,工具,服务,管理,环境,网上,地方,怎样在Linux系统中下载和安装OpenJDK包手动安装jdk,首先需要下载jdk,记查看linux用户命令行?
查看linux用户命令行?,信息,系统,时间,名称,密码,用户,命令,地址,状态,设备,Linux查看所有用户用什么命令输入“cat /etc/passwd”命令查看所