Хорошо, похоже, у меня проблема с тем, чтобы мой скрипт загружал файл с правильным именем файла.
Если я уберу пробелы и тире, который выглядит так
if($type == 'mc'){
$file_name = $_POST['Ids'];
$file_name = str_replace('-', '', $file_name);
$file_name = str_replace(' ', '&', $file_name);
$url = base64_decode($stream);
$file_url = "scd.php?stream=".$url."&name=".$file_name."";
$url = array('url' => $file_url);
echo json_encode($url);
}
Вот scd.php
<?php
$file = $_GET['stream'];
$name = $_GET['name'];
header("Content-type: application/x-file-to-save");
header("Content-Disposition: attachment; filename=".$name.".mp3");
readfile($file);
exit();
?>
Это приведет к загрузке, но при этом будет сохранено только первое слово в отправленном имени. Так сказать имя Your Song Here
он хочет сохранить его как Your.mp3
но если я уберу str_replace
от $file_name
переменная, то он попытается сохранить файл как Your
без расширения, но все еще только первое слово.
Мне нужно, чтобы пройти весь $file_name
переменная напр. Your Song Here.mp3
и все еще сохраните это как файл MP3.
Я не совсем уверен, что я делаю неправильно
Оберните имя файла в кавычки, что-то вроде
header("Content-Disposition: attachment; filename=\"${name}.mp3\"");
(не могу вспомнить, как избежать «s в строке в php).
Я считаю, что это на самом деле требуется спецификацией HTTP.
Вы пытаетесь использовать объект HTML (&
) в вашем имени файла. Не делай этого. Кроме того, не используйте пробелы в именах файлов. Вам лучше заменить ' '
с _
:
$file_name = str_replace(' ', '_', $file_name);
Тогда ваше имя файла будет безопасно передаваться по URL без какой-либо специальной кодировки или необходимости экранирования.