PDF dans compte sécurisé

WRInaute impliqué
Bonjour,

J'ai un petit soucis.

J'ai des internautes qui ont des comptes perso. Ils peuvent uploader des fichiers pdf et les consulter à partir de leur compte perso (accessible par login et mot de passe).

Ses fichiers sont stockés sur le disque.

Mon problème :comment empécher l'internaute A de consulter les fichiers PDF de l'internaute B?

Le tout avec PHP et mysql...

Merci pour votre aide
 
WRInaute impliqué
Voici ce que je fais habituellement:

- lors de l'upload, donner un 'id' unique au fichier, le stocker dans un répertoire innaccessible via HTTP. Par commodité, je le renomme id.pdf
- lors de l'upload, insérer en base de donnée l'id de l'utilisateur et l'id du fichier
- pour accéder à un PDF, l'utilisateur devra passer par un fichier "dl.php" en passant en paramètre l'id du fichier
- vérifier en bdd s'il est bien l'utilisateur qui a envoyé le fichier
- si oui, lire le fichier en PHP (readfile...) et l'envoyer au navigateur avec les bons en-têtes.

Après tu peux rajouter la possibilité de conserver le nom original du fichier (stocker en bdd lors de l'upload, puis envoyer l'en-tête adéquat lors de la lecture du fichier)...

C'est une solution un peu plus lourde que si le download était direct, surtout pour les gros fichiers, PHP peut broncher...
 
WRInaute impliqué
FloBaoti a dit:
- si oui, lire le fichier en PHP (readfile...) et l'envoyer au navigateur avec les bons en-têtes.

Cette solution me convient parfaitement mais comment tu fais cette partie (le readfile et SURTOUT l'envoi au navigateur avec les bons entetes).

J'avais pensé utiliser fpdf. Mais tu sembles utiliser une autre solution. Tu peux me guider pour ta solution?

merci d'avance :wink:
 
WRInaute discret
haderach a dit:
Bonjour,

J'ai un petit soucis.

J'ai des internautes qui ont des comptes perso. Ils peuvent uploader des fichiers pdf et les consulter à partir de leur compte perso (accessible par login et mot de passe).

Ses fichiers sont stockés sur le disque.

Mon problème :comment empécher l'internaute A de consulter les fichiers PDF de l'internaute B?

Le tout avec PHP et mysql...

Merci pour votre aide

bonjour,

puisque tu as une base, tu ne peux pas stocker la liste des fichiers que l'utilisateur a uploadé dans une table ??
 
WRInaute impliqué
haderach a dit:
Cette solution me convient parfaitement mais comment tu fais cette partie (le readfile et SURTOUT l'envoi au navigateur avec les bons entetes).

J'avais pensé utiliser fpdf. Mais tu sembles utiliser une autre solution. Tu peux me guider pour ta solution?

merci d'avance :wink:
C'est dans la doc de PHP, à la fonction header:

Example#7 Utilisation de header() pour générer un fichier de type PDF ou d'un autre type
Code:
<?php
// Vous voulez afficher un pdf
header('Content-type: application/pdf');

// Il sera nommé downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// Le source du PDF original.pdf
readfile('original.pdf');
?>
 
WRInaute discret
Les entêtes sont gérés en php avec la fonction header. Sur le manuel, t'as justement un exemple sur les entêtes à envoyer pour les fichiers pdf ;)
 
WRInaute impliqué
Super une bonne avancée.

MAIS, le fichier stocké sur mon disque n'est pas correctement lu. Acrobat me donne un problème.

Adobe Reader n'a pas pu ouvrir downloaded[1].pdf, car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correstement, par exemple).

lorsque je l'appele en direct pas de problème!

Une idée?
 
WRInaute impliqué
J'ai résolu avec IE (faut voir avec les autres browsers)

En plaçant la ligne
header('Content-Disposition: inline; filename="downloaded.pdf"');

donc inline au lieu de attachement c'est bon.

Merci à tous.... :wink:
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut