内容处理:如何找到文件?

时间:2014-12-05 12:47:02

标签: http-headers content-disposition

在PHP中我正在使用

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

强行下载某个文件。

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

我在this RFC或其他地方找不到任何有用的内容。我可能会问一些我错过的明显事实。

1 个答案:

答案 0 :(得分:1)

Content-Disposition: attachment;filename="mysong.mp3"标题告诉浏览器不要尝试显示响应的主体,而是将其保存在文件中;值“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标头不是必需的,但是浏览器生成一个很好的进度条,估计剩余时间并在传输结束时知道文件是否成功传输(当它收到时)很有用宣布的字节数)或出错的地方(收到的字节数减少)。