webForumDet fria alternativet

Hantera nerladdning

1 svar · 718 visningar · startad av Troll

TrollMedlem sedan dec. 2003229 inlägg
#1

Skulle behöva lite hjälp med att lösa ett problem med tvingad nerladdning.

Nu funkar det som så att om man klickar på en länk som ser ut såhär: '/getmp3/32/'

.htaccess läser det som: 'download.php?cat=mp3&file=32'

Så långt funkar allt som det ska, jag upptäckte dock att om man högerklickar på länken och väljer spara som så sparas det som 'Filnamn.htm' men det är ingen .htm-fil utan en mp3:a med fel filändelse, inte så snyggt.

Jag löste det först med att skicka till en sida som väntade 3sek med att skicka vidare till download.php, då sparades bara en tom .htm-sida om jag valde att högerklicka på länken. Men klickar man vanligt, då stannar man sedan kvar på en tom sida efter att man klickat på 'öppna/spara' som kommer upp efter ett tag.

Det jag vill ska hända är alltså att 'öppna/spara'-rutan dyker upp om man klickar på länken, vilket det gör nu. Men jag vill inte att högklicket ska ge en felaktigt döpt mp3-fil.

Har testat att sätta en ' header("Location: /sidan-man-kom-ifrån/");' i download.php på olika ställen men jag får inte till det. Vill gärna inte använda javaScript för att lösa detta.

Förstår ni vad jag menar och hur löser jag det på bästa sätt?

Anledningen till att jag vill sköta det på detta vis istället för att göra det lätt för mig är helt enkelt för att jag vill ha koll på vilka filer som laddas ner och hur många gånger.

download.php

$cat = fix_char($_GET['cat']);
$file = fix_int($_GET['file']);

if (empty($cat) || empty($file)) {
  echo "error";
}else{
  if ($cat==="mp3") {
  $trackSQL = mysql_query("SELECT
                           *
                           FROM
                           tbl_disco_tracks
                           WHERE
                           tID='$file'
                           AND
                           tMP3<>'0'
                           AND tShow='1'
                           ") or die(mysql_error());

                           $uNFO = mysql_fetch_array($trackSQL);

                           if (isset($uNFO['tID'])) {
                             $klickSQL = "UPDATE tbl_disco_tracks SET tKlicks = tKlicks+1 WHERE tID=$file";
                             mysql_query($klickSQL) or die(mysql_error());

                             $mp3=$uNFO[tMP3];

                                $output_file = "mp3/".$mp3;
                                header('Cache-Control: no-store, no-cache, must-revalidate');
                                header('Cache-Control: pre-check=0, post-check=0, max-age=0');
                                header('Content-Transfer-Encoding: none');
                                header('Content-Type: application/octetstream; name=".basename($output_file).";"');
                                header('Content-Type: application/octet-stream; name=".basename($output_file).";"');
                                header("Content-Disposition: attachment; filename=".basename($output_file).";");
                                header("Content-Length: ".filesize($output_file));

                                $handle=fopen($output_file,'rb');
                                $contents = "";
                                do {
                                $data = fread($handle, 8192);
                                if (strlen($data) == 0) {
                                break;
                                }
                                print($data);
                                } while (true);
                                fclose($handle);

                                exit;

                           }else{
                             echo "
                                  what?
                                  ";
                           }
  }
}
TrollMedlem sedan dec. 2003229 inlägg
#2

Det ordnade sig

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
136 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)