2010-05-18 8 views
2

Disons que j'ai des fichiers pdf stockés sur mon serveur et je veux seulement permettre à une personne qui a payé avoir accès à télécharger un pdf particulier. Par exemple, disons que j'ai un tas d'e-books. Par exemple, par exemple. La seule façon pour un utilisateur de télécharger un e-book A est que son compte contienne les informations d'identification appropriées pour ce livre en particulier.Comment puis-je autoriser uniquement les utilisateurs privilégiés à télécharger un fichier PDF avec PHP?

Quelle est la meilleure façon d'y parvenir?

Toutes les idées/conseils sur la façon d'améliorer mon idée sont grandement appréciés!

Mon idée actuelle:

  • Un utilisateur passe une commande

  • En cas de succès, un nouveau dossier serait créé par leur /account_num/order_id/Une copie du fichier particulier serait stocké dans ce répertoire

  • Avez php générer un fichier .htaccess que permettrait seulement l'accès d'un url qui contient un hachage aléatoire intégré en elle.
  • La seule façon qu'un utilisateur serait en mesure de accéder à cette page hachée au hasard est si ils sont signés en tant qu'utilisateur droit, et le hachage correspond avec le hachage stocké dans la base de données, sinon ils sont redirigés à la page d'accueil.

Répondre

4

Enregistrez les fichiers PDF sous la racine du document. Quand quelqu'un veut télécharger dire, A.pdf, dirigez-les vers une page PHP comme: download.php?file=A.pdf. Ecrivez cette page download.php pour vérifier les privilèges de l'utilisateur demandeur et forcer le téléchargement de A.pdf si ses privilèges sont suffisants.

+0

+1 Trop vite pour moi –

+0

Comment forcer le téléchargement d'un fichier sous la racine du document? – ThinkingInBits

+0

session, readfile: http://php.net/manual/en/features.sessions.php, http://us.php.net/manual/fr/function.readfile.php – webbiedave

4

1) Conserver les fichiers PDF situé en dehors de la racine de votre document afin que personne ne peut les acess directement via un navigateur

2) Une servir page PHP le fichier PDF de sorte que la seule façon de les amener à se par étant connecté avec succès et vérifié et cela est appliquée sur chaque téléchargement

code pour le téléchargement de fichiers si PHP (s'il vous plaît assurez-vous de frotter entrée):

<?php 
    $file_name = $_GET['filename']; // somefile.pdf 
    $file = '/home/pathtofile/' . $file_name; 

    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename=' . $file_name); 
    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); 
    exit; 
?> 
+0

Merci beaucoup les gars! – ThinkingInBits

1

Stockez les fichiers PDF en dehors de la racine du document (si pas possible à cause d'un hébergement boiteux configuration, stockez-les quelque part difficile à deviner).

Vérifiez que l'utilisateur a la permission, et faire quelque chose comme:

<?PHP 
$pdf_path = '/some/dir/'; 
header('Content-type: application/pdf'); 
readfile($pdf_path . 'mydoc.pdf'); 

Vous pourriez avoir besoin d'ajuster les en-têtes plus loin, mais c'est l'idée de base.

Questions connexes