如何编写一个php脚本,在一个页面上下载几首歌曲中的一首?
我有一个页面,上面有歌曲,每首歌曲旁边都有一个下载按钮:如何编写一个php脚本,在一个页面上下载几首歌曲中的一首?,php,download,Php,Download,我有一个页面,上面有歌曲,每首歌曲旁边都有一个下载按钮: <table> <tr> <td>Off the Grid</td> <td><a href="http://example.com/php/download.php?Off_the_Grid.mp3">Download</a></td> </tr> <tr> <td>Fa
<table>
<tr>
<td>Off the Grid</td>
<td><a href="http://example.com/php/download.php?Off_the_Grid.mp3">Download</a></td>
</tr>
<tr>
<td>Far-Sighted</td>
<td><a href="http://example.com/php/download.php?Far_Sighted.mp3">Download</a></td>
</tr>
</table>
离网
远见卓识
然后我有以下强制下载的脚本:
<?php
$audioFile = "Off_the_Grid.mp3";
$fileName = $_GET['$audioFile'];
// Fetch the file info.
$filePath = '../audio/' . $audioFile;
if(file_exists($filePath)) {
$fileName = basename($filePath);
$fileSize = filesize($filePath);
// Output headers.
header("Cache-Control: private");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header("Content-Length: ".$fileSize);
header("Content-Disposition: attachment; filename=".$fileName);
// Output file.
readfile ($filePath);
exit();
}
else {
die('The provided file path is not valid.');
}
?>
我的目标是将这个脚本变成一个函数,这样当点击歌曲的下载链接时——例如,“远视”——即“远视”,并且只有“远视”被强制下载。如果点击“离线”下载链接,该功能将运行“离线”。等等,我发布的所有歌曲
上述代码在强制下载“脱离网格”时起作用。但是,我试图让它强制下载任何被点击的歌曲。现在,如果我点击“远视”旁边的“下载”,那么根据我发布的代码,“离线”将下载,“远视”将不下载。显然,《远见卓识》应该下载;然而,我被卡住了:-/
有没有干净的方法?我一直在想一个办法来做这件事,但没有用。有没有办法使我的变量“$audiofile”根据单击的歌曲下载链接更改其值?我打算为每首歌曲创建php文件,然后在那里发布歌曲特有的脚本,或者只发布一个php文件,其中包含针对每首歌曲定制的脚本的多个实例。但这似乎很荒谬
有没有一个好的方法来实现这一点?谢谢 我认为问题在于您没有正确使用GET。我会尽量让自己说清楚: 有没有网址?将由GET解析,并且将按以下方式提供密钥:
example.com?key=value&key2=value2
因此,再看看您是如何解析GET值的。如果需要,您可以查看本教程:
我建议采取以下解决办法:
<tr>
<td>Far-Sighted</td>
<td><a href="http://example.com/php/download.php?id=Far_Sighted.mp3">Download</a></td>
</tr>
请注意,最好验证GET提交的任何数据,以避免注入。谢谢您的回答!强制下载适用于“../download.php?远视.mp3”和“../download.php?远视=远视.mp3”。问题不在于强制下载,而在于如何使用脚本的一个实例来运行单击的任何歌曲。这是您要回答的问题还是我误解了您的答案?我的观点是,我认为您没有正确使用GET,文件路径将始终是
$filepath='../audio/'。“Off_the_the_Grid.mp3”
而不是单击歌曲时的变量。因此,需要明确的是:-确保您通过GET获得了所需的信息-确保文件路径指向您想要的位置!谢谢优雅简单:)不客气!:)记住使用GET时要小心,因为任何数据都可能被引入其中。我认为这是没有必要的。只要你确定代码不能被注入,你就没事了。避免这种情况的一个好方法是对任何GET应用htmlspecialchars()
。您可以在php.net中查找更多信息,如以下评论:
$audioFile = $_GET['id'];
// Fetch the file info.
$filePath = '../audio/' . $audioFile;