2010-04-18 6 views
2

Je suis à la recherche d'une sorte d'authentification de téléchargement. Je vais donner à un utilisateur un lien vers un fichier, et je veux m'assurer que seulement cette personne ne l'aura qu'une fois. Existe-t-il une solution simple sans mettre en place une base de données?Comment configurer l'authentification par téléchargement?

Encore mieux: s'il est possible d'avoir un lien Web crypté qui vous permettra de télécharger un fichier de mon serveur FTP une seule fois, après que le lien devienne invalide.

Répondre

2

Vous pouvez utiliser un script PHP simple. Ce script retient l'entrée dans le fichier GET sur le navigateur. Après son exécution, vous pouvez renommer ce fichier en chaîne aléatoire. cette seule personne à la première personne télécharger ce fichier. Votre lien obtiennent quelque chose comme ça. www.domain.tld/dir/script.php? file =./usr/123.tar.gz. Vous pouvez filename Crypter en base64 aussi, dans cette option votre lien est www.domain.tld/dir/script.php file = Li91c3IvMTIzLnRhci5neg ==

Script sans base64:

<?php 
$file = $_GET['file']; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    rename($file, "secret_new_filename"); 
    exit; 
} 
else 
{ 
    echo 'File don\'t exist'; 
} 
?> 

Et avec base64 :

<?php 
$file = base64_decode($_GET['file']); 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    rename($file, "secret_new_filename"); 
    exit; 
} 
else 
{ 
    echo 'File don\'t exist'; 
} 
?> 
+0

C'est une très bonne idée Svisstack. Malheureusement, je ne connais pas très bien PHP. Y a-t-il un script autour de ça? –

+0

J'écris ce script, donnez-moi un moment. – Svisstack

+0

Wow merci beaucoup! /le respect! –

Questions connexes