Содержимое заголовка 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";
}
2 answers
Я думаю, что filesize($track)
неверно, это должен быть весь путь filesize("/home/user/gets/".$track)
. Это приведет к тому, что php будет выводить сообщения об ошибках, не позволяя вам устанавливать длину содержимого и заголовок расположения.
Попробуйте убрать кавычки из имени файла:
header('Content-Disposition: attachment; filename=test.mp3');
^^^^^
Получение имени сценария вместо имени файла, которое вы пытаетесь использовать, обычно является признаком того, что имя файла содержит недопустимые символы для файловой системы, в которую браузер пытается сохранить. например, "
запрещено.