Php скачивает все типы файлов - PullRequest
1 голос
/ 22 декабря 2009

Мне просто интересно, есть ли способ настроить другой тип контента при загрузке через php? например .mp3 и .pdf и т. д. вместо того, чтобы указывать только один тип файла. Моя проблема в том, что у меня есть 2 типа файлов для загрузки, один тип - pdf, а другой - mp3, но если я изменю «content-type» на audio / mpeg, то расширение для него не отображается. pdf ... надеюсь, ты понимаешь? пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

Если вы имеете в виду, что ваш пользователь загружает некоторый контент, отправленный из сценария PHP, который также отправляет заголовок HTTP Content-type, не можете ли вы установить для этого заголовка другое значение для каждого типа файла?

Примерно так (псевдокод) :

if (file is a PDF) {
    header('Content-type: application/pdf');
} else if (file is a MP3) {
    header('Content-type: audio/mpeg');
}

И случай «по умолчанию» может быть полезен, если у вас есть и другие файлы, о которых вы еще не думали.

0 голосов
/ 22 декабря 2009

Эта функция прекрасно работает для меня:

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

Также можно указать максимальную скорость, с которой файл доставляется.

...