我的页面上有歌曲,每首歌旁边都有一个下载按钮:
<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.');
}
?>
我的目标是将此脚本变成一个功能,以便在点击歌曲的下载链接时 - 例如,“远视” - “远视”并且只有“远视”被迫下载。如果改为点击“Off the Grid”下载链接,该功能将运行“Off the Grid”。对于我发布的所有歌曲等等。
上述代码可以强制下载“Off the Grid”。但是,我正试图让它强制下载任何被点击的歌曲。现在,如果我点击“远视”旁边的“下载”,那么根据我发布的代码,“Off the Grid”会下载,“Far-Sighted”将无法下载。显然,“远见”应该下载;但是,我被困住了: - /
有没有办法干净利落地做到这一点?我一直试图想办法做到这一点,没有简洁的利益。是否有办法使我的变量“$ audiofile”根据点击的歌曲下载链接改变其值?我打算为每首歌创建php文件,只发布那首歌中独有的脚本,或者只是一个php文件,其中包含为每首歌量身定制的几个脚本实例。但那似乎很荒谬。
有没有一种很好的方法来实现这一目标?谢谢!
答案 0 :(得分:2)
我认为问题在于你没有正确使用GET。我会尽量让自己变得清晰:
任何网址?将由GET解析,密钥将按以下方式给出:
example.com?key=value&key2=value2
因此,再看一下你如何解析GET值。如果需要,您可以查看本教程:http://www.tizag.com/phpT/postget.php
我建议采用以下解决方案:
<tr>
<td>Far-Sighted</td>
<td><a href="http://example.com/php/download.php?id=Far_Sighted.mp3">Download</a></td>
</tr>
和php
$audioFile = $_GET['id'];
// Fetch the file info.
$filePath = '../audio/' . $audioFile;
考虑到最好验证来自GET的任何数据以避免注射。