如何从我的下载名称中删除tmp-

时间:2015-11-28 01:44:09

标签: php

因此,当用户下载我目前拥有的文件时,它会将歌曲名称拉为类似的内容。

$songs = file_get_contents('https://api.soundcloud.com/tracks/'.$id.'/stream?client_id='.$myID.'');
$filename = './tmp/' . stripslashes(htmlspecialchars($songTitle)) . '.mp3';
$filenames = '/tmp/' . stripslashes(htmlspecialchars($songTitle)) . '.mp3';
$trying = '' . stripslashes(htmlspecialchars($songTitle)) . '';
$songname = stripslashes(htmlspecialchars($songTitle));
file_put_contents($filename, $songs);


<form method="POST" action="http://example.com/download.php" accept-charset="utf-8">
    <input type="hidden" name="file_name" value="<?php print $trying; ?>" />
    <input type="hidden" name="song_name" value="<?php print $songname; ?>" />
    <input type="Submit"  class="btn btn-success" value="Download Song" /> 
</form>

然后在download.php文件中我有以下内容。

$file = 'tmp/' . $_POST['file_name'] . '.mp3';

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.$file);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
header("Content-Type: audio/mp3");
readfile($file);

当用户下载文件时,它会显示出类似tmp-song-artist-song-name.mp3的内容,我们非常感谢您的帮助!

编辑:

Preview Image

当我将header('Content-Disposition: attachment; filename='.$file);行更改为header('Content-Disposition: attachment; filename='.$songtitle);

时会发生这种情况
$songtitle = $_POST['song_name'];

它似乎解决了标题问题,但却创造了一个全新的问题,这不是我们想要的。

2 个答案:

答案 0 :(得分:1)

您使用了错误的Content-Disposition标头。在您的第一篇文章中,您使用了完整的文件名以及tmp /,并且在编辑后,您在结尾处输入了.mp3。我已经更正了下面的下载文件代码:

$file = 'tmp/' . $_POST['file_name'] . '.mp3';

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.$_POST['file_name'] . '.mp3');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
header("Content-Type: audio/mp3");
readfile($file);

答案 1 :(得分:-1)

从文件名中删除'tmp /'部分。

header('Content-Disposition: attachment; filename=' . str_replace('tmp/', '', $file));