Pas évident !

Résolu
fredix2 Messages postés 8 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 13 septembre 2010 - 6 déc. 2009 à 19:11
fredix2 Messages postés 8 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 13 septembre 2010 - 8 déc. 2009 à 16:02
Bonjour,
j'aurais besoin de vos lumières ... voilà, j'ai réussi grace à tous vos codes à faire un espace membre. Ca fonctionne très bien, et la page qui est utilisée pour faire afficher des photos ne s'affiche que si on est connecté. Mon problème c'est pour protéger l'adresse ou il y a les photos.
Si je ne mets rien, n'importe qui en tapant directement l'adresse à accès au photos, si je mets un "htaccess", à l'affichage des photos, ca me demande encore un code, ca fait beaucoup de codes!
Est-ce que quelqu'un aurait une solution ?
Merci d'avance pour vos réponse.
@+

6 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2009 à 19:11
Salut,

Pour être accessible à un membre enregistré, il faut qu'un fichier (image, css, etc) soit accessible "tout court" (c'est à dire à tout le monde).
Pour protéger l'accès et le restreindre aux membres authentifiés, il existe plusieurs solutions, dont voici les deux principales :
- on utilise l'authentification HTTP (RFC 2617, implémentée par PHP si celui-ci est compilé en tant que module Apache, pas en tant que CGI)
- on rend les fichiers à protéger inaccessibles depuis le web (en les plaçant en dehors de l'arborescence de publication ou avec un .htaccess) et on utilise un script PHP qui s'assure que l'utilisateur est autorisé à consulter le fichier.

Voici les lignes directrices pour mettre en oeuvre la seconde solution (la première étant simplissime à mettre en place).

- le script PHP s'assure que le membre est authentifié (en exécutant la routine habituelle que l'on exécute sur les autres pages)
- si le membre est autorisé à consulter le fichier image demandé, alors on passe à la suite, sinon, on lui envoie une erreur HTTP 403
- le script va ouvrir le fichier image (fopen(), file_get_contents(), ou new SplFileObject())
- le script envoi un entête http correspondant au type de fichier :
header('Content-type: image/gif');

image/png ou image/jpg => bref, en fonction du type (voir la liste officielle des types mime sur le site de l'IANA)
- on envoie également les entêtes indiquant le nom du fichier et sa taille :
header("Content-disposition: inline; filename=$filename; size=$filesize");
conformément à la RFC2183 (a priori)
- si on veut forcer le téléchargement du fichier, il faut remplacer inline par attachement dans l'entête précédent (provoque l'ouverture d'une boîte de dialogue pour enregistrer le fichier sans l'afficher dans le navigateur)
- on écrit sur la sortie standard (le navigateur) le contenu du fichier image, précédemment lu. Le navigateur, grâce aux entêtes envoyés saura quoi en faire (afficher l'image, l'enregistrer sur le disque dur, etc). Il est important (bien que facultatif) de préciser le nom du fichier (par défaut ce sera le nom du script PHP) ainsi que sa taille (qui permet au navigateur de savoir combien de temps il lui faut pour télécharger le fichier).
- c'est tout

Chose importante : l'URL change... Il ne FAUT PAS spécifier l'url directe de l'image, mais l'url du script PHP avec un argument permettant au script de savoir quelle image renvoyer au navigateur. Cela peut être un ID (si la liste des images est stockée dans une base de données), le nom complet (attention de vérifier le chemin, le fichier, etc, pour éviter l'accès à des fichiers sensibles), bref, tout ce qu'on veut pourvu que le script puisse retrouver l'image. Il est également possible de laisser l'URL inchangée (lien direct vers l'image) en prenant soin de définir des règles de réécriture d'URL (grâce à mod_rewrite qui doit être activé dans la configuration d'Apache) qui font pointer l'URL de l'image vers le script en question, avec le nom du fichier demandé à l'origine en argument.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
manu7930 Messages postés 191 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009
6 déc. 2009 à 19:39
premiere chose, c'est bien ce que vous voulez ?

la page qui est utilisée pour faire afficher des photos ne s'affiche que si on est connecté
0
manu7930 Messages postés 191 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009
6 déc. 2009 à 19:42
si la reponse et oui, moi je ferais un :

<?php require("authentification.php"); ?>
ceci intégré dans la page avant l'accès aux photos.


biensure la page authentification.php comportera un petit script tout simple permetant d'authentifier la personne et dire si elle peu accéder ou pas aux photos
0
fredix2 Messages postés 8 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 13 septembre 2010
7 déc. 2009 à 08:34
Bonjour, merci pour votre réponse, mais ce n'est pas cela que je recherche.
"la page qui est utilisée pour faire afficher des photos ne s'affiche que si on est connecté" = Ca c'est bon, ca marche.
C'est le répertoire ou il y a les photos que je voudrais protéger.
Merci. @+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredix2 Messages postés 8 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 13 septembre 2010
7 déc. 2009 à 08:48
Ah... a moins que...peut-être que vous avez raison et que c'est moi qui m'exprime mal.
Admettons que le répertoire soit protégé par un htaccess, est-il possible avec un script dans la page de transferer les variables du nom d'utilisateur et du mot de passe pour charger les photos.
Si je mets un htaccess dans le repertoire, quand ma page accède aux photos, ca me demande un mot de passe ... mais le membre c'est déjà connecté, c'est cette fenetre d'alerte que je voudrais voir disparaitre.
Merci. @+
0
fredix2 Messages postés 8 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 13 septembre 2010
8 déc. 2009 à 16:02
Salut, ouahoouu merci pour cette réponse...je vais étudier ca tranquillement. @+
0
Rejoignez-nous