Affichage photos sur serveur web

Petit nouveau ! | 4 Messages

16 janv. 2020, 14:52

Bonjour à tous,

J'essaie de faire un site afin de pouvoir consulter mes photos stockées sur mon PC depuis n'importe où.
Pour cela je comptais utiliser mon PC avec wampserver d'installé, avec un site écrit en PHP.
Ne connaissant rien à PHP, j'ai trouvé ce bout de code:

Code : Tout sélectionner

<?php $dir_nom = '../../../photos'; // dossier listé (pour lister le répertoire courant : $dir_nom = '.' --> ('point') $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant $fichier= array(); // on déclare le tableau contenant le nom des fichiers $dossier= array(); // on déclare le tableau contenant le nom des dossiers while($element = readdir($dir)) { if($element != '.' && $element != '..') { if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;} else {$dossier[] = $element;} } } closedir($dir); if(!empty($dossier)) { sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant echo "<p>Liste des dossiers accessibles dans '$dir_nom' : \n\n</p>"; echo "\t\t<ul class=rien>\n"; foreach($dossier as $lien){ echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n"; } echo "\t\t</ul>"; } if(!empty($fichier)){ sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant echo "<p>Liste des images accessibles sur l'hebergeur : \n\n</p>"; echo "\t\t<ul class=rien>\n"; foreach($fichier as $lien) { echo "\t\t\t<li><img src=\"$dir_nom/$lien \"></li>\n"; } echo "\t\t</ul>"; } ?>
Cela semble plutôt bien faire son travail, listant les photos que j'ai sur un dossier précis de mon PC et affichant les images.
C'est sur ce deuxième point que j'ai besoin de vos compétences car l'affichage des images est très aléatoire.
Je m'explique: dans l'exemple ci-dessus, les photos sont cherchées dans le dossier $dir_nom = '../../../photos';
Rien qu'à cette étape certaines photos s'affichent, d'autres non.
En faisant un autre test, je crée un dossier A dans le dossier photos, je renseigne donc $dir_nom = '../../../photos/A';
En copiant une image du dossier photos qui s'affichait dans le dossier A, cette photo ne s'affiche plus.
En affichant le code source, le chemin semble correct ainsi que le nom du fichier trouvé.

Je n'y comprends donc pas grand chose...

Si une âme charitable pouvait me venir en aide...
Merci d'avance et bonne journée!

Eléphant du PHP | 303 Messages

17 janv. 2020, 16:14

Il y peut-être un problème de caractères spéciaux dans la nomenclature des fichiers photos : la fonction urlencode() pourrait peut-être aider.
Essaye de trier d'un côté les photos qui apparaissent et de l'autre celles qui n'apparaissent pas : de là, tu trouveras peut-être la différence entre les unes et les autres.

Petit nouveau ! | 4 Messages

17 janv. 2020, 22:50

Alors j'ai un peu avancé de mon côté: le côté aléatoire était dû au cache non vidé de mon navigateur, en fait aucune photos ne s'affichent pas.

Quand le dossier contenant mes photos se trouvent dans dossier www de Wamp, les photos s'affichent correctement.
Par contre, si je précise un dossier hors de www, les photos sont trouvées mais non affichées. En cliquant sur les photos j'obtiens:
"Not Found
The requested URL was not found on this server. "

Y a-t-il un paramétrage à effectuer du côté Apache (ou autre) afin de pouvoir accéder à d'autres dossiers que ceux du serveur?

J'ai entendu parler des alias et des liens symboliques, mais soit je ne suis pas sûr que ça réponde à mon besoin, soit je ne sais pas le mettre en place...

Mammouth du PHP | 1396 Messages

17 janv. 2020, 23:20

2 possibilités :
- mettre le dossier photos sous www
- au lieu d'appeler directement le fichier, appeler un script php en passant le fichier voulu en paramètre et retourner l'image qui peut alors ne pas être sous www avec la fonction https://www.php.net/manual/fr/function.readfile.php

Petit nouveau ! | 4 Messages

18 janv. 2020, 00:39

Dans l'idéal j'aimerai éviter de mettre mon dossier photo sous www. Si je n'arrive pas à autre chose c'est ce que je choisirai cette solution.

Pour ta deuxième solution, je pense comprendre globalement ce que tu veux essayer mais je bloque quelque part: le script1 récupère les noms des fichiers du dossier et appelle le script2 qui lui sera chargé d'afficher. L'appelle du script2 se fait par un exec? Avec le fichier en paramètre? Le script2 doit faire une commande pour récupérer le paramètre?

Mammouth du PHP | 1396 Messages

18 janv. 2020, 00:41

echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
au lieu de mettre un chemin relatif, il faut mettre l'appel du script php en passant en paramètre $lien

Avatar du membre
Mammouth du PHP | 1258 Messages

18 janv. 2020, 12:04

Salut, si tu ne veux pas déplacer les dossiers d'images tu peux effectivement faire des liens symboliques dans le www vers les différents dossiers d'images.
https://www.quennec.fr/trucs-astuces/sy ... symbolique

Attention l'option Apache FollowSymLinks doit être activé sinon les liens symboliques seront ignorés.
https://superuser.com/questions/244245/ ... w-symlinks
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Petit nouveau ! | 4 Messages

18 janv. 2020, 16:09

Salut Saian,

Mais les liens symboliques ne concernent que Linux? Car mon wampserver tourne sous windows, du coup je ne vois pas comment faire si c'est possible

Avatar du membre
Mammouth du PHP | 1258 Messages

18 janv. 2020, 16:12

Des raccourcis vers les dossiers ? mais je ne sais pas si ça fonctionne, ça fait trop longtemps que j'ai pas touché à Windows.

EDIT
Apparemment il serait possible de faire des liens symboliques sous Windows...
https://www.linuxtricks.fr/wiki/les-lie ... us-windows

Sinon tu peux aussi faire des alias mais à priori ça va compliquer les choses pour sortir la liste des fichiers.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Mammouth du PHP | 1684 Messages

20 janv. 2020, 09:29

Si tu commence a aller chercher des fichiers hors du dossier www, fais très attention à la sécurité. il faudra t'assurer de n'accèder que aux fichiers que tu autorise et pas les autres.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube