2014-12-05 41 views
0

在PHP中,我使用内容处置:它如何找到一个文件?

header('Content-Disposition: attachment;filename="mysong.mp3"'); 

强制下载某个文件。

在其中一种情况下,发生文件大小为零字节(即使文件存在且为3MB)。这就是为什么我问自己:文件名参数如何实际获取文件?即使它嵌套在多个文件夹中,也没有给出的路径。

我没有在this RFC也没有发现任何有用的东西。我可能会问一些我错过的东西。

+0

Nit:RFC 2616在这里完全不相关。 – 2014-12-05 16:36:32

回答

1

Content-Disposition: attachment;filename="mysong.mp3" header告诉浏览器不尝试显示响应的主体,而是将其保存在文件中;值“mysong.mp3”是文件名的建议,但浏览器通常会询问用户使用哪个名称(并提供默认的“mysong.mp3”)。

这行代码不会从磁盘读取任何文件,也不会将任何内容发送回浏览器。你的代码必须这样做。它可以从文件中读取内容或者即时生成内容或通过任何其他方式生成内容;这完全取决于你。

例如,如果你在一个文件中的内容,你可以做这样的事情:

$filepath = '/foo/bar/file.mp3';   // put the correct file path and name here 

header('Content-Disposition: attachment;filename="mysong.mp3"'); 
header('Content-Length: '.filesize($filepath)); 
readfile($filepath); 

Content-Length头不是必需的,但在浏览器中交出了漂亮的进度条,它是有用的,估计剩下的时间,并在传输结束时知道文件是否成功传输(当它接收到已公布的字节数)或出错时(收​​到较少的字节)。

+0

该死的。在一秒钟之内,我瞥了一眼你的答案,我看到了'readfile',并记得我错过了它。有人从我的代码中删除它,并且为了我的生活,我无法找出为什么这不起作用,因为它在2天前完美运行。谢谢你,先生。 – trainoasis 2014-12-05 13:03:21

+0

不客气。 – axiac 2014-12-05 13:04:46

相关问题