Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    E-commerce - download mp3

    Salve,
    Sto realizzando un sito di e-commerce per il download di mp3 (piccola casa discografica)

    Praticamente vorrei che un file fosse disponibile per il download solo ed esclusivamente dopo che l'utente abbia effettuato un accredito via carta di credito.

    Per quanto riguarda la gestione degli script di e-commerce non dovrei aver problemi.

    Non capisco però come fare a bloccare/permettere il download di un path/file specifico.

    Avete qualche dritta da propormi?
    Grazie.
    Stefano.

  2. #2
    Forse la soluzione potrebbe essere via .htaccess .. ma come cambiare "al volo" il file per permettere ad un utente il download di un path?

  3. #3
    molto più semplicemente fai scaricare il file .mp3 tramite php (butti fuori gli header e leggi il file a blocchi da 8kb inviandolo al browser in modo da non collassare tutto)

    da php, prima di inviare il file, controlli se ha credito sufficente ed il gioco è fatto
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Ok.. ottima dritta e grazie per la velocità della risposta

    Ho trovato qualcosa sull'argomento (che NON penso "spezzetti" il file in stream di 8kb come mi hai indicato .. ..)

    Codice PHP:
    $nome_file $_GET['file'];
    $dimensioni_file=filesize($nome_file);

    header("Content-Type: mp3/application; name=".$nome_file);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$dimensione_file);
    header("Content-Disposition: inline; filename=".$nome_file);
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");
    file_get_contents(mp3/$nome_file); 
    Come "Content-Type" uso "mp3/application"

    Lo script l'ho testato in locale su un linux Apache. Il problema è che il file che mi invia è di 0 KB.. Sbaglio qualcosa?

    Un'altra cosa. Per evitare il download diretto via URL potrei usare questo script (.htaccess). Il problema è che è indispensabile che AllowOverride sia impostato su None

    <Files ~ ".+">
    Order allow,deny
    Deny from all
    Satisfy All
    </Files>

    Ma se il serverweb ha impostato allowoverride su All .. potrei sovrascrivere l'impostazione tramite ad esempio un Mod Rewrite ?

    Grazie 1000,
    Stefano.

  5. #5
    Così funziona!

    Rimarrebbe il problema dell' AllowOverride .. ..



    Codice PHP:
    $path "mp3/";
    $file $_GET['download_file'];
    $fullPath $path.$file;

    if (
    $fd fopen ($fullPath"r")) {
        
    $fsize filesize($fullPath);
        
    $path_parts pathinfo($fullPath);
        
    $ext strtolower($path_parts["extension"]);

        
    header("Content-type: application/octet-stream");
        
    header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
        
    header("Content-length: $fsize");
        
    header("Cache-control: private"); //use this to open files directly

        
    while(!feof($fd)) {
            
    $buffer fread($fd2048);
            echo 
    $buffer;
        }
    }
    fclose ($fd);
    exit; 

  6. #6
    ok, questo codice è decisamente meglio, anche perché non ti killa la memoria del server

    però
    $buffer = fread($fd, 2048);
    echo $buffer;

    lo puoi trasformare in
    echo fread($fd, 8192);

    ovvero gli dici di leggere 8kb per volta (nella media è il valore più efficente)

    inoltre ti conviene usare l'istruzione flush dopo, ad esempio, 5 invii

    da
    while(!feof($fd)) {
    $buffer = fread($fd, 2048);
    echo $buffer;
    }

    a
    $counter=0;
    while(!feof($fd)) {
    echo fread($fd, 8192);
    $counter++;
    if ($counter % 5)
    {
    flush();
    }
    }

    Originariamente inviato da thefalcon
    Così funziona!

    Rimarrebbe il problema dell' AllowOverride .. ..



    Codice PHP:
    $path "mp3/";
    $file $_GET['download_file'];
    $fullPath $path.$file;

    if (
    $fd fopen ($fullPath"r")) {
        
    $fsize filesize($fullPath);
        
    $path_parts pathinfo($fullPath);
        
    $ext strtolower($path_parts["extension"]);

        
    header("Content-type: application/octet-stream");
        
    header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
        
    header("Content-length: $fsize");
        
    header("Cache-control: private"); //use this to open files directly

        
    while(!feof($fd)) {
            
    $buffer fread($fd2048);
            echo 
    $buffer;
        }
    }
    fclose ($fd);
    exit; 
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Ottimo!
    Gentilissimo, grazie!

    Stefano.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.