Bonjour,

Je suis chez Club-Internet Smiley eek ...(je précise d'entrée)
Pour un site, on utilise souvent les balises <img src="photo.jpg" alt=""/> et donc, dans le source, on lit l'adresse de l'image.
Cela devient génant pour un site comportant une partie privée de type gallerie de photos.
Sans modification de type CHMOD, existe-t-il un moyen de visualiser des images sans lire l'emplacement sur le serveur ? et surtout en pouvant choisir l'image qui apparait et ...
Ah oui, y'a pas que l'image sur la page, bien sur...

Merci pour vos commentaires et réponses qui seront les bienvenues...
salut.

Si tu as accès au PHP, tu peux faire un script qui te rend le contenu binaire de l'image.

un truc du style :

<img src="script.php?image=X"  />

il te faut un script (ici nommé script.php) qui lit le contenu d'un fichier et le renvoie (avec des echo).
Il te faut juste changer les entetes (avec la focntion header) pour que les navigateurs comprennent que le fichier (script.php) ne rend pas de l'HTML mais une image (voir les types MIME).

Par contre il faut que tu trouves un moyen de faire la correspondance entre ton paramètre de script (ici image avec la valeur X), et la véritable image :

X = "images/photo.gif";
Y = "images/photo_2.gif";
Z = "images/photo_3.gif";
etc.


mais ca n'empechera pas les gens de récuperer tes images (vive le clic droit Smiley ravi )...par contre dans le source ils ne verront pas l'url véritable de l'image.

Allez...je suis de bonne humeur, voici le script.
Attention ! je l'ai pas testé. Je l'ai fait de mémoire....


<?php
	if (isset($_GET["image"])){
	
		header('Pragma: public');
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
		header('Content-Transfer-Encoding: none');
		header("Content-type: image/gif"); // à modifier en fonction de l'image
		$url = "..."; // à generer en fonction du parametre "image"
		$fic=fopen($url,"r");
		
		echo fread($fic,filesize($url));
		
	}

	exit();
	
?>
Les deux lignes :


		$fic=fopen($url,"r");
echo fread($fic,filesize($url));


peuvent avantageusement être remplacées par une seule. De plus, on est sûr que le fichier est retourné en totalité ce qui n'est pas forcément le cas avec fread.

echo file_get_contents($url);


[mode pinailleur on]
A propos de l'en-tête last modified, je pense qu'il serait peut-être avantageux d'envoyer la date de modification réelle du fichier ... ça permet la mise en cache.
[mode pinailleur off]
Bonsoir,

Je ne comprends pas bien le problème ...

Si on a accès au code source de ta page, c'est que l'on voit déjà les images à l'écran ! Donc pourquoi veux-tu brouiller les pistes en voulant dissimuler le chemin vers ces images ... Smiley biggol

Sinon, si tu ne veux pas que l'on ai accès à tes images en entrant directement l'URL dans la barre d'adresse, il ne suffit pas tout simplement de protéger le répertoire contenant les images par un couple de fichiers .htaccess et .htpasswd ???
Pandore > Le problème c'est qu'avec un .htaccess, tu restreins aussi l'affichage, ce qu'il ne voudrait pas si j'ai bien compris.
Merci pour vos réponses, je suis en train de regarder...

En fait, je desire monter un site web avec une partie public et une partie privé.
Dans cette partie privée, je veux faire quelques galeries de photos mais je ne veux pas que les gens puissent recuperer l'emplacement des photos pour y acceder sans le contexte du site...
D'où, compte tenu de mon hébérgeur, ma demande...

Laissez moi le temps parce que même bien renseigné, je me bats avec les Templates de TinyButStrong qui me perdent un peu...(ce serait un autre sujet)...

En attendant, je vais tester la solution du GET qui ne passe pas... surement à cause de l'interpreteur de TBS...
Merci à tous... cela fonctionne

En fait, j'avais 2 erreurs...
la premiere, vraiment stupide où rien ne se passait puisque la variable n'était pas interpretée dans le code HTML
<img src="script.php?image=$monImage"  />
et la seconde où mes variables déclarés en global ne passe pas dans le script.php.

En fait comme j'utilise une base de données et que l'accès au script est sécurisé avec le login, je passe comme parametre l'Id de l'image (que je coderai par la suite) et avec cet Id, j'identifie dans le script l'image en question...

Ma derniere question pour ce post, je me demandais quand même =>les variables globales sont globales au script en cours et à ses includes mais innacessible aux scripts externes appelés (depuis le HTML par ex.)??

Repondez moi et après on peut clore le sujet... Merci encore
Administrateur
Bonjour,

(sans frame hein) lorsque le navigateur du visiteur demande une page au serveur, celui-ci se rend compte qu'elle va devoir être interprétée par PHP et lui file la main.
Tout ce qui est rajouté à la page par include/require(_once) fait partie de la page comme s'il y avait eu un copier-coller. Qu'il y ait de multiples parties de code <?php blabla ?> disséminées ne change rien (si ce n'était que local et indépendant, il ne serait pas possible de faire un simple class=\"<?php echo $saClasse; ?>\" puisque $saClasse ne serait pas défini au préalable Smiley sweatdrop ). Tout ce qui est entre 'blabla' n'est pas interprété ainsi que le HTML qui n'est pas entre balises <? du_code ?> bien entendu. Je ne sais plus à quoi <<< est équivalent, il faudrait vérifier mais ça se rencontre rarement Smiley smile
"Le script en cours" se termine à la fin de la page principale ou par un exit() (ou fonction similaire) en cours de route ou par un plantage non récupéré.
ok merci Felipe...donc à ma question,
a écrit :
les variables globales sont globales au script en cours et à ses includes mais innacessible aux scripts externes appelés?
on peut conclure par un OUI...

Un autre souci = mon site étant securisé par session sur la partie privé, je fais un include qui verifie si j'ai bien une session déclaré en cours...

Or avec ce fameux script externe, je n'ai plus accès à mes variables de sessions et donc je fais planter le script si j'applique mon include de sécurité bien que je sois reconnu
Et sans include de sécurité => quiconque meme non logué peut avoir accés par tatonnement à ces fameuses images...

Comment faire pour empecher cela?
a écrit :

à quoi <<< est équivalent, il faudrait vérifier mais ça se rencontre rarement

Tu veux dire quoi par <<< ?
La syntaxe herdoc ?
Si c'est ça personnellement je l'utilise quasiment toujours.
cfred a écrit :
En fait, je desire monter un site web avec une partie public et une partie privé.
Dans cette partie privée, je veux faire quelques galeries de photos mais je ne veux pas que les gens puissent recuperer l'emplacement des photos pour y acceder sans le contexte du site...

Ok, je comprends mieux ta demande Smiley biggrin

QuentinC a écrit :
Pandore > Le problème c'est qu'avec un .htaccess, tu restreins aussi l'affichage, ce qu'il ne voudrait pas si j'ai bien compris.

Autant pour moi alors Smiley cligne
Administrateur
QuentinC a écrit :
Tu veux dire quoi par <<< ?
La syntaxe herdoc ?
Si c'est ça personnellement je l'utilise quasiment toujours.

Tu m'en apprends le nom Smiley rolleyes Oui ça doit être ça, je viens de voir que ça a pas mal d'avantages en fait, je vais creuser ça ^^

/HS
Modifié par Felipe (28 Sep 2006 - 19:24)
Oui, ça devient vite avantageux quand tu as plus de 2-3 lignes à afficher : les variables sont interprétés, mais tu n'as plus besoin de te soucier de mettre des \ partout à cause des quotes.
Par contre je ne suis pas sûr de l'orthographe du nom.
Salut à tous

QuentinC
a écrit :
Tu veux dire quoi par <<< ? La syntaxe herdoc ? Par contre je ne suis pas sûr de l'orthographe du nom.
c'est la syntaxe heredoc (cf.PHP5 Avancé Ed2 p.69)

Bref personne n'a de réponse ou d'idée à ma question...
a écrit :
Un autre souci = mon site étant securisé par session sur la partie privé, je fais un include qui verifie si j'ai bien une session déclaré en cours...

Or avec ce fameux script externe, je n'ai plus accès à mes variables de sessions et donc je fais planter le script si j'applique mon include de sécurité bien que je sois reconnu
Et sans include de sécurité => quiconque meme non logué peut avoir accés par tatonnement à ces fameuses images...

Comment faire pour empecher cela?
Si quelqu'un a une idée... Merci pour vos commentaires en tout cas
Salut cfred !

je ne suis pas sûr de bien comprendre ta question mais si tu utilises les variables de sessions PHP elles sont accessibles de n'importe quel script :
<?php
session_start(); 
$id=$_SESSION['iduser'];
etc...
?>


@+