使用php提供可下载文件
PHP通常会将位于公用文件夹之外的可下载文件发送到服务器:使用php提供可下载文件,php,file,header,download,attachment,Php,File,Header,Download,Attachment,PHP通常会将位于公用文件夹之外的可下载文件发送到服务器: $fp = fopen($file,"r") ; header("Content-Type: application/msword"); header('Content-Disposition: attachment; filename="'.$filename.'"'); while (! feof($fp)) { $buff = fread($fp,4096); echo $buff; } 我有两个问题: 与we
$fp = fopen($file,"r") ;
header("Content-Type: application/msword");
header('Content-Disposition: attachment; filename="'.$filename.'"');
while (! feof($fp)) {
$buff = fread($fp,4096);
echo $buff;
}
我有两个问题:
标题
,我们没有php脚本的html输出
(或javascript)重定向,以将用户转发到实际的下载urlheader('Content-Length: '. filesize($path));
1由于必须使用此脚本处理文件,因此需要更多 资源不仅仅是普通的下载链接。然而,这取决于您的需要。如果您认为这些文件需要更高的安全性。假设只有经过身份验证的用户才能下载该文件,并且只有该文件属于他。然后你需要验证这些。在这种情况下,您需要输入问题中的代码。如果您的文件对公众开放,则您可以显示指向该文件的直接链接,该文件可能暂时位于公共位置 2我可以向您推荐两种执行此操作的方法 方法1: 您需要javascript支持以方便的方式执行此类需求。假设您需要在可以下载的页面上显示一些HTML。你可以用你想要的HTML创建一个页面,你可以点击下载按钮
如果输出缓冲处于活动状态,则使用PHP提供文件将消耗大量内存,并且性能将比apache提供的常规文件差得多
因此,要在已经给出的答案中添加一些内容:
- 发送完头后,使用
ob\u end\u flush()
结束输出缓冲,这样在开始输出之前文件内容不会缓存在内存中
readfile()
可能比循环更有效地将文件从磁盘传输到web
已经说过了,但强调得不够:一定要包括内容长度
标题,因为它将允许下载程序测量进度。非常感谢提供有关标题的信息。它救了我一天
<iframe id="downloadFrame" style="display:none"></iframe>
<script type="text/javascript">
function downloadFile(filepath)
{
var ifrme = document.getElementById("downloadFrame");
ifrme.src = "download.php?filepath="+filepath;
}
</script>
<meta http-equiv="Refresh" content="3;URL=<?php echo $fullHTTPathToYourFile ?>" />