Telechargement restreint de fichiers pour user ds bd

Résolu
cs_hasgaard Messages postés 4 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 29 avril 2008 - 29 avril 2008 à 21:30
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 29 avril 2008 à 23:05
Bonjour à tous,

La question n'est pas en rapport avec php, toutefois je pense que les érudits que vous êtes pourrez peut-être m'aiguiller.
Voilà, voilà, toutes mes excuses pour cette intrusion :)

J'ai, sur un site banal, des utilisateurs enregistrés dans une base mysql qui ouvrent une session grâce à leur login et pass.
Certains fichiers (pdf,doc) leur sont destinés (chacun individuellement), j'aurais voulu savoir comment restreindre le téléchargement de ces fichiers à leur session bien précise.

Pour évidemment éviter que ces documents soient téléchargeables directement par tout le monde grâce à l'url exacte.

Mon site est en php sur iis, ce qui vous évite déjà de me suggérer le htaccess (qui ne me paraît pas indiqué de toute manière mais je me trmope peut-être).

Avez-vous une piste ?

Merci à tous et bonne soirée.

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
29 avril 2008 à 22:11
Salut,

C'est assez simple, en fait.
Il faut que tu interdises purement et simplement l'accès via HTTP au(x) répertoire(s) qui contient(nent) les fichiers en question. IIS permet de faire ça avec les permissions.
Tu peux aussi placer les fichiers à protéger en dehors de l'arborescence de publication web.

Ensuite, il faut utiliser PHP pour :
1. Vérifier que l'utilisateur est connecté
2. Vérifier ses droits (quels fichiers lui sont accessibles)
3. Lire le fichier qu'il demande (file_get_contents() en PHP5, fopen(), fgets() et fclose() en PHP4)
4. Envoyer un header correspondant au type de fichier au navigateur :
header('Content-type: application/pdf');
par exemple, pour un PDF
5. Afficher simplement le contenu du fichier sur la sortie standard (un vulgaire echo fait tout à fait l'affaire).
6. C'est tout...

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
3
cs_hasgaard Messages postés 4 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 29 avril 2008
29 avril 2008 à 22:55
ça alors , ça me coupe la chique que ce soit si simple.
Les fichiers sont donc placés hors rép web. C'est nickel, je pensais qu'il y aurait des problèmes de droit d'accès même pour les scripts.

Merci pour ton aide efficace, par contre si je veux que le fichier ne soit pas lu en streaming (acrobat dans explorer) mais directement proposé au téléchargement, c'est une question de header?
3
cs_hasgaard Messages postés 4 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 29 avril 2008
29 avril 2008 à 23:03
Merci neigedhiver :)

Ta piste fut des plus précieuses. Je réponds à ma dernière question de la sorte :

header('Content-type: application/pdf');

header('Content-Disposition: attachment; filename="downloaded.pdf"');

readfile("C:\file.pdf");


Bonne soirée à toi
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
29 avril 2008 à 23:05
Pour les permissions, l'explication est simple : PHP n'accède pas aux fichiers via HTTP, mais via le système de fichiers. Si les fichiers ne sont pas accessibles depuis le web, si PHP a les permissions pour y accéder, alors c'est bon.

Et pour forcer le téléchargement... Tu as posté pendant que j'écrivais, j'allais justement t'orienter vers l'exemple 7 de cette page de doc de PHP ;)

Bonne continuation :)

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Rejoignez-nous