Php下载所有文件类型

时间:2009-12-22 13:49:58

标签: php downloading mime-types

我只是想知道在通过php下载时是否有办法设置不同的“内容类型”?像.mp3 AND .pdf等..而不必只指定一种文件类型。我的问题是我有2种文件类型需要下载,一种是pdf,另一种是mp3,但是如果我将“content-type”改为audio / mpeg,那么它就不会显示扩展名。 pdf ...我希望你明白吗?请帮忙!

2 个答案:

答案 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;
}

您还可以选择指定文件的最大传送速度。