13 berichten aan het bekijken - 1 tot 13 (van in totaal 13)
  • Q:
    Bijdrager
    TheBT

    download link maken

    Na lang zoeken, toch even hier vragen…

    Ik moet een simpel invulformulier maken (naam, email). Nadat de persoon al deze gegevens heeft ingevuld zou die een mp3 file moeten kunnen downloaden.
    Op zich geen probleem, maar het adres van de mp3 file mag niet zichtbaar zijn!
    Dit omdat m’n anders gewoon dit webadres kan doorgeven en iedereen dit liedje kan downloaden zonder z’n gegevens achter te laten.
    In principe een beetje hetzelfde systeem als je software online koopt, waarna je enkel de link krijgt na het registreren.

    Kent er iemand een (php) script die dit kan?

    Thanks! :wink:

    Bijdrager
    danielpunt

    Je kan ook met het downloaden controleren of je client een geldige sessie gebruikt.

    Dus hij vult het formulier in, er word een unieke sessie id aangemaak (bv in een database) en bij het downloaden van het bestand word er gecontroleerd of het sessie ID klopt, als dat het geval is kan er gedownload worden of anders naar het formulier geforward word.:)

    Bijdrager
    TheBT

    Ja had ook gedacht aan sessies in php, maar hoe los ik het probleem dan op van de url van het mp3 bestand?
    Ik moet dan toch nog een php maken die de mp3 binnenhaald, misschien dmv fpassthru of andere functie?

    Bijdrager
    computer space

    Safari laat van alles de URL zien. Ook van foto’s die bijvoorbeeld door een SWF actiescript worden geladen. Je zult echt met sessies moeten werken inderdaad. Je zult dus sowieso voor iedere download een uniek URL moeten regelen.

    Bijdrager
    TheBT
    ”Martiniman”

    Safari laat van alles de URL zien.

    Ja dat weet ik, vind ik trouwens wel super handig!

    ”Martiniman”

    Je zult dus sowieso voor iedere download een uniek URL moeten regelen.

    En hoe doe ik dat dan best? Heb niet direct een idee hoe dit te realiseren… vandaar mijn “hulpkreet” naar jullie experts :wink:

    Bijdrager
    danielpunt

    Je download link is dus een PHP pagina die controleerd of er een geldige sessie word gebruikt, en als dat allemaal klopt kun je een download starten (via PHP, met een forced download :))

    Als ik thuis ben zal ik even kijken, want ik heb een keer ongeveer zo iets gemaakt.:)

    Bijdrager
    TheBT
    ”danielpunt”

    Als ik thuis ben zal ik even kijken, want ik heb een keer ongeveer zo iets gemaakt.:)

    Thanks!
    Ben benieuwd!

    Bijdrager
    danielpunt

    Hm, ik kan het niet meer vinden, maar dit wil een een hele quick-‘n-dirty oplossing.

    ik ga er vanuit dat je al een Database connectie hebt.
    [code:1:4dea1fadf1]session_start(); // niet vergeten!
    $_SESSION = array();

    $sessionId = md5(rand() . time());
    $file = ‘song.mp3′; // hier het pad naar het MP3’tje
    $sql = "INSERT INTO downloadSessions (`sessionId`, `file`) VALUES (’".$sessionId."’, ‘".$file."’)";
    $res = mysql_query($sql) or die(mysql_error()); // kun je nog op vangen met een error oid.

    $_SESSION[’download’] = $sessionId;
    [/code:1:4dea1fadf1]

    En op de download pagina
    [code:1:4dea1fadf1]if(isset($_SESSION[’download’])) {
    $sessionId = $_SESSION[’download’];
    $sql = "SELECT `file` FROM downloadSessions WHERE `sessionId` = ‘".$sessionId."’ LIMIT 1";
    $res = mysql_query($sql);

    if($res != false) {
    $file = mysql_fetch_assoc($res);
    $file = $file[’file’];

    // gewoon van PHP.net
    $mm_type="application/octet-stream";
    header("Cache-Control: public, must-revalidate");
    header("Pragma: hack"); // WTF? oh well, it works…
    header("Content-Type: " . $mm_type);
    header("Content-Length: " .(string)(filesize($file)) );
    header(’Content-Disposition: attachment; filename="’.$file.’"’);
    header("Content-Transfer-Encoding: binaryn");

    readfile($file);

    } else {
    // foutmelding
    }
    } else {
    // ongeldig en zal dus geforward moeten worden oid.
    }[/code:1:4dea1fadf1]

    Ow ja, en de SQL voor de database;
    [code:1:4dea1fadf1]CREATE TABLE `downloadSessions` (
    `sessionId` varchar(32) NOT NULL,
    `file` varchar(62) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8[/code:1:4dea1fadf1]

    Bijdrager
    fuen

    Maar iemand kan dan toch zo de url van $file invullen?

    Grappige is dat ik nu met precies hetzelfde probleem zit, en ik word aangeraden chmod 660 te gebruiken, waardoor het alleen server-side op te vragen is, en daarna d.m.v php een mp3 met de content van het liedje aan te maken.

    Zal straks even mijn oplossing posten.

    EDIT:
    [code:1:71e5679904]<?php
    error_reporting(E_ALL);
    /*******
    * Situatie:
    * Je hebt een .mp3-bestand met rechten 660.
    * Dat bestand is enkel downloadbaar via dit bestand.
    * Aanroepen:
    * {bestandofzo.php}?bestand=bestand.mp3
    **/

    define(’UPLOADDIR’, ‘uploads/mp3/’);

    if(!isset($_GET[’bestand’]))
    {

    echo ‘melding ofzeauj’;
    exit; // zodat we niet 100 if-dingesten in elkaar krijgen

    }

    $bestand = trim(strtolower($_GET[’bestand’])); // alle bestanden zijn kleine lettertjes hier :’)

    if(!file_exists(UPLOADDIR.$bestand))
    {

    echo ‘melding ofzeauj’;
    exit;

    }

    header ("Content-type: audio/mp3");
    header ("Content-Disposition: attachment; filename=".$bestand.""); // let wel op; zodra er spaties in voorkomen krijg je vage dingen, probeer maar eens :’)

    $fp = fopen(UPLOADDIR.$bestand, ‘r’);
    $inhoud = fread($fp, filesize(UPLOADDIR.$bestand));
    fclose($fp);
    echo $inhoud;
    ?>[/code:1:71e5679904]

    Bijdrager
    EL Mystica

    hmm, ik zou het anders doen.

    1 table “downloads” met iets als :
    downloadID int (11)
    fileUrl varchar (150)
    fileHash varchar( 20 )

    dan een table “users” met iets als:
    userID int (11)
    userHash varchar (25)
    username var …

    en een table met user_download:
    linkID int(11)
    userHash varchar(25)
    fileHash varchar(20)

    en dan op volgende wijze tewerk gaan:

    – nieuwe gebruiker registeren in “users”
    – downloadfile linken aan user in “user_download”
    – een link weergeven als download.php?u=$userHash&f=$fileHash
    – dan kijk je of de gebruiker bestaat aan de hand van userHash en check je of ie die file mag downloaden aan de hand van beide parameters in “user_download”
    – als ie mag, dan forceer je de download ..

    Bijdrager
    TheBT

    Mijn dank allemaal… jullie hebben me goed op weg geholpen! :wink:

    Bijdrager
    DarkRaverNL

    Je kan dus ook nog .htacces gebruiken om de url te verbergen niet?

    Bijdrager
    EL Mystica
    ”DarkRaverNL”

    Je kan dus ook nog .htacces gebruiken om de url te verbergen niet?

    Nee, eens gekend, kan je die doorgeven. En in je activiteitenoverzicht zie je die al snel …

13 berichten aan het bekijken - 1 tot 13 (van in totaal 13)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.