如何编写一个可下载页面上几首歌曲之一的php脚本?

时间:2013-07-10 09:35:33

标签: 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>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文件,其中包含为每首歌量身定制的几个脚本实例。但那似乎很荒谬。

有没有一种很好的方法来实现这一目标?谢谢!

1 个答案:

答案 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的任何数据以避免注射。