lamp - mac - Il modo migliore per registrare in modo trasparente i download?




xampp download (3)

Ho un progetto personale che è online da qualche tempo. Ho mantenuto un conteggio dei download in questo modo:

  • Quando l'utente fa clic sul collegamento per il download, raggiunge uno script PHP che scrive alcune informazioni in una tabella.
  • Una volta scritti i dati, lo script restituisce il percorso del file attuale.
  • L'utente ha quindi la possibilità di salvare il file sul proprio disco rigido come se si trattasse di un altro download.

Questo ha funzionato abbastanza bene per un po '; tuttavia, impedisce agli utenti di right-click > save target as... perché in realtà vedranno semplicemente download.php nella finestra di dialogo "File Salva ..". Pertanto, l'unico modo per scaricare il progetto è fare clic con il tasto sinistro sul link.

Mi piacerebbe migliorare il processo in modo che un utente possa scaricare il progetto usando qualsiasi metodo con cui lui / lei sia più a suo agio. Quindi, quali sono alcuni modi migliori per registrare in modo trasparente i download senza entrare nel modo di utenti?

Per quello che vale , la macchina è uno stack LAMP standard, quindi nessuna opzione .NET qui.


Configurare Google Analytics? :)


Questo è il motivo per cui molti siti utilizzano un link per il download che ti porterà in un'altra pagina, che avvierà automaticamente un download quando la pagina verrà caricata e fornirà all'utente un link per scaricare direttamente. Principalmente è un modo per ottenere visualizzazioni di pagina per le impressioni degli annunci, ma aiuta anche a tenere traccia di chi sta scaricando i loro file più facilmente.


Questa risposta spiega come utilizzare una pagina di trasferimento per registrare il download e avviare il download del file non appena qualcuno fa clic sul collegamento. L'ho provato di recente per fare clic con il tasto destro.

Sto usando un php middle-man per registrare i download di file. Un URL formattato http://192.168.1.1/xfer.php?file=Li9zb25ncy9HTE9XX0xlYXZlIFlvdXIgSGF0IE9uLm1wMw restituisce il nome del file per entrambi Salva con nome ... e il tasto sinistro del mouse su Firefox.

Ecco il mio xfer.php

<?
$filename = base64_url_decode($_GET['file']);
if ($_GET['file']){
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename='.str_replace(" ", "_",basename($filename)));
    header("Content-Transfer-Encoding: binary");
    header('Content-Length: '. filesize($filename));
    readfile($filename);
}
$fh = fopen("test.html","a");
fwrite($fh,basename($filename)."\n<br />");
fclose($fh);
function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}
?>

E la pagina che si collega a xfer.php è

$link = "xfer.php?file=".base64_url_encode("./songs/$key");

con $key è il nome del file e le songs sono la cartella in cui sono conservati i nomi dei file.