Содержимое заголовка PHP-Расположение: вложение forces.php файл или встроенный


Я хочу загрузить один файл .mp3 со своего сайта, но при использовании этого кода он вызывает .php в Firefox и Safari. Но в chrome он отправит файл как встроенный и будет воспроизводиться на странице. Как я могу заставить их на самом деле загрузить файл .mp3?

$track = $_SERVER['QUERY_STRING'];

if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: audio/mpeg");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}

Я также пытался загрузить zip-файл и изменить тип содержимого на application/ocetet-stream, но он заставляет файлы .php работать во всех браузерах.

//$track = $_SERVER['QUERY_STRING'];
$track = 'testfile.zip';
if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: application/octet-stream");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}
Author: tiggles, 2012-08-17

2 answers

Я думаю, что filesize($track) неверно, это должен быть весь путь filesize("/home/user/gets/".$track). Это приведет к тому, что php будет выводить сообщения об ошибках, не позволяя вам устанавливать длину содержимого и заголовок расположения.

 3
Author: Musa, 2012-08-16 21:26:25

Попробуйте убрать кавычки из имени файла:

header('Content-Disposition: attachment; filename=test.mp3');
                                                  ^^^^^

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

 9
Author: Marc B, 2012-08-16 21:20:48