如何编写一个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;