2013-07-10 1 views
1

나는 각 노래에 옆에 노래와 다운로드 버튼이있는 페이지가 : 그럼페이지에 여러 곡 중 하나를 다운로드하는 PHP 스크립트를 작성하려면 어떻게해야합니까?

<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.'); 
    } 

?> 

내 목표는이를 설정하는 것입니다 스크립트를 다운로드하여 노래의 다운로드 링크 (예 : "Far-Sighted"- "Far-Sighted")와 "Far-Sighted"만 다운로드하도록 할 수 있습니다. 대신 "Off the Grid"다운로드 링크를 클릭하면 "Off the Grid"기능이 실행됩니다. 내가 게시하는 모든 노래 등.

위 코드는 "그리드에서 벗어남"을 강제로 다운로드하는 한 작동합니다. 그러나, 나는 그것이 클릭되는 어떤 노래라도 다운로드하도록 강요하려고 노력하고있다. 바로 지금, "Far-Sighted"옆에있는 "Download"를 클릭하면 게시 된 코드에 따라 "Off the Grid"가 다운로드되고 "Far-Sighted"는 다운로드되지 않습니다. 분명히, "멀리 - 시력"다운로드해야합니다; 그러나 나는 막혔습니다. -/

이것을 올바르게 수행 할 수있는 방법이 있습니까? 나는 이것을 간결하게 사용할 수있는 방법으로 생각하려고 노력해 왔습니다. 내 변수 "$ audiofile"이 클릭 한 노래 다운로드 링크에 따라 값을 변경하도록 만드는 방법이 있습니까? 각 노래에 대한 php 파일을 작성하고 거기에있는 노래에 고유 한 스크립트 또는 각 노래에 맞는 스크립트의 여러 인스턴스가있는 하나의 PHP 파일을 게시하기로했습니다. 그러나 그것은 어리석은 것처럼 보였다.

이렇게하는 좋은 방법이 있습니까? 감사!

답변

2

내가 겪고 있다고 생각하는 것은 GET을 올바르게 사용하지 않는다는 것입니다. 가능한 한 명확하게하려고 노력할 것입니다 :

어떤 URL이 있습니까? 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에서 오는 모든 데이터를 확인하십시오.

+0

답변 해 주셔서 감사합니다. 강제 다운로드는 ".../download.php? Far_Sighted.mp3"및 ".../download.php? farSighted = Far_Sighted.mp3"에 대해 모두 작동합니다. 그것은 문제가되는 다운로드를 강요하지 않지만 클릭 한 노래에 대해 실행되는 스크립트의 인스턴스 1 개를 사용하는 방법입니다. 그것이 당신이 대답하는 질문입니까, 아니면 제가 당신의 대답을 오해하고 있습니까? –

+0

필자는 GET을 제대로 사용하지 않고 파일 경로가 항상'$ filePath = '../audio/'라고 생각했다. "Off_the_Grid.mp3"를 클릭 한 노래의 변수가 아닙니다. 그래서, 명확하게하기 : - 당신이 GET 당신이 원하는 정보를 얻고 확인 - 당신이 완벽하게 – Sikian

+0

작품을 원하는 위치에 FILE_PATH가 가리키고 있는지 확인하십시오! 감사. 우아하게 간단 :) –

관련 문제