• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

link generieren?

ooJAKOBoo

Neues Mitglied
hallo,
ich hab folgendes problem..

wie kann ich aus einer .rar-datei die in einem bestimmten ordner aufm space liegt einen link generieren mit dem der download dieser rar-datei nur ein einziges mal möglich ist?

die datei soll aber nach dem download in dem ordner bleiben und nicht gelöscht werden.
 
Werbung:
Meinst du, dass die Datei pro Benutzer oder insgesamt nur ein Mal gedownloadet werden kann?
Ersteres wäre nämlich nur sehr schwer, wenn nicht, gar nicht durchzuführen.

MfG Icy
 
ja genau..
ich sende jemandem den link in einer mail zu.
dieser kann beim beim anklicken die datei einmal runterladen.
sobald der link geklickt wurde bzw. der download startet wird dieser link ungültig.
die datei bleibt allerdings an dem selben ort und wird nicht gelöscht.
 
Werbung:
Du generierst ein zufälliges Token (z. B. $token = md5(mt_rand())) und schreibst dieses zusammen mit dem Pfad der entsprechenden Datei in eine Datenbanktabelle.

Dann generierst und mailst du die Download-URL: z. B. $url = 'http://example.org/download/?token=' . $token;

Im Downloadskript kannst du nun nachsehen, ob das Token in der DB vorhanden ist und falls ja, die entsprechende Datei ausliefern und das Token löschen.

(ungetestet)

PHP:
<?php

if (!isset($_GET['token'])) {
    die('Token not set');
}

// DB-Verbindung aufbauen

// ...

// Datei zum Token ermitteln

$q = "SELECT
          filepath
      FROM
          downloads
      WHERE
          token = '" . mysql_real_escape_string($_GET['token']) . "'
      LIMIT
          1";
$res = mysql_query($q);

if (mysql_num_rows($res) == 0) {
    die('Token invalid');
}

$row      = mysql_fetch_assoc($res);
$filepath = $row['filepath'];

// Token löschen

$q = "DELETE FROM
          downloads
      WHERE
          token = '" . mysql_real_escape_string($_GET['token']) . "'
      LIMIT
          1";
$res = mysql_query($q);

// Datei an den Browser schicken

if (file_exists($filepath) && is_file($filepath)) {
    // send headers
    header('Cache-control: private');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize($filepath));
    header('Content-Disposition: filename=' . basename($filepath));

    readfile($filepath);
} else {
    die('Error: The file ' . $filepath . ' does not exist!');
}
 
Zurück
Oben