Нужна помощь в получении этого заголовка автозагрузки, чтобы показать правильный путь - PullRequest
0 голосов
/ 23 августа 2010

У меня есть страница с mp3-файлами, которые можно воспроизводить с плеера, а также есть ссылки для загрузки песен.Когда пользователь нажимает на ссылку для скачивания, ему нужно открыть диалоговое окно загрузки вместо открытия медиаплеера, поэтому мне было рекомендовано использовать этот скрипт заголовка:

включает в себя / auto-download.php:

<?php
$path = $_GET['path'];
header('Content-Disposition: attachment; filename=' . basename($path));
readfile($path);
?>

А затем на моей главной странице ссылка выглядит следующим образом:

<a href="includes/auto_download.php?path=Media/Audio/Date/song.mp3">Song Name</a>

Я, кажется, что-то делаю не так с моими путями, например, когда я нажимаю на ссылку, загрузкаоткрывается окно, и я могу загрузить файл с правильным именем, но он не содержит никакой информации.

Чтобы уточнить мою файловую структуру, я получил это:

/ Патроны(где моя главная страница index.php с моей ссылкой

/ Патроны / включает (где мой скрипт auto-download.php)

/ Патроны / Медиа / Аудио / Дата / (этоэто где все песни)

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Либо измените HTML-код на это:

 <a href="includes/auto_download.php?path=../Media/Audio/Date/song.mp3">Song Name</a>

ИЛИ измените код PHP на этот:

 readfile('../'.$path);
0 голосов
/ 23 августа 2010

$ путь должен быть относительным путем к файлу от корня сети. без косой черты. Если файлы находятся вне корневого веб-каталога, следует использовать полный путь (/home/webuser/song_files/song.mp3).

Например $path = 'song_files/'. $_GET['name_of_the_file'];

Вам также следует проверить, не существует ли файл, и выйти с ошибкой. Вот пример, который я сделал в codeigniter.

function _begin_download($document_data) {
    basepath = 'uploads/';
    $filepath = basepath . $document_data->filename;
    if (file_exists($filepath)) {
        header("Content-type: " . $document_data->mimetype);
        header("Content-length: " . filesize($filepath));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-disposition: attachment; filename="' . $document_data->filename . '"');
        readfile($filepath);
        exit();
    } else {
        exit('File not found.');
    }
}
...