我只是想知道在通过php下载时是否有办法设置不同的“内容类型”?像.mp3 AND .pdf等..而不必只指定一种文件类型。我的问题是我有2种文件类型需要下载,一种是pdf,另一种是mp3,但是如果我将“content-type”改为audio / mpeg,那么它就不会显示扩展名。 pdf ...我希望你明白吗?请帮忙!
答案 0 :(得分:2)
如果您的意思是您的用户正在下载从PHP脚本发送的某些内容(也发送Content-type
HTTP标头),您是否可以为每种类型的文件设置不同值的标头?
像这样的(伪代码):
if (file is a PDF) {
header('Content-type: application/pdf');
} else if (file is a MP3) {
header('Content-type: audio/mpeg');
}
如果您还有一些其他尚未考虑过的文件,那么“默认”案例可能会有用。
答案 1 :(得分:0)
这个功能对我很有用:
function Download($path, $speed = null)
{
if (is_file($path) === true)
{
set_time_limit(0);
while (ob_get_level() > 0)
{
ob_end_clean();
}
$size = sprintf('%u', filesize($path));
$speed = (is_null($speed) === true) ? $size : intval($speed) * 1024;
header('Expires: 0');
header('Pragma: public');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . $size);
header('Content-Disposition: attachment; filename="' . basename($path) . '"');
header('Content-Transfer-Encoding: binary');
for ($i = 0; $i <= $size; $i = $i + $speed)
{
echo file_get_contents($path, false, null, $i, $speed);
while (ob_get_level() > 0)
{
ob_end_clean();
}
flush();
sleep(1);
}
exit();
}
return false;
}
您还可以选择指定文件的最大传送速度。