Affichage photos sur serveur web

Fermé
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020 - Modifié le 16 janv. 2020 à 21:15
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020 - 17 janv. 2020 à 21:48
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:
<?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!


EDIT : Correction des balises de code => Ajout du LANGAGE pour avoir la coloration syntaxique !
A voir également:

7 réponses

Judge_DT Messages postés 29395 Date d'inscription vendredi 5 février 2010 Statut Modérateur Dernière intervention 23 octobre 2021 9 619
16 janv. 2020 à 19:48
Salut,

Et.. Sinon, l'usage du mod "autoindex" de apache, qui permet de lister le contenu d'un répertoire et ensuite de l'afficher ne te suffit pas ? :-)
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 21:04
Bonjour, je ne sais pas je ne connais pas cet usage mais je vais investiguer pour voir si ça convient
0
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020
16 janv. 2020 à 20:10
Bonsoir,
Ce sujet viens juste d'être résolu
Voir le lien:https://forums.commentcamarche.net/forum/affich-36414518-lister-un-repertoire
Votre probleme se trouve
if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
else {$dossier[] = $element;}
}

ce qui s'explique que si il trouve un dossier stock la variable dossier qui est un array
foreach($dossier as $lien){
echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
}

qui t'affiche le dossier pas les elements qui s'y trouvent
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 21:10
Je ne suis pas sûr que ce soit le même problème que le mien, si je comprends bien le topic cité a un problème pour lister ses éléments dans son répertoire. Moi cette partie là fonctionne. En affichant le code source j'ai bien le bon nombre de photos.

foreach($dossier as $lien){
echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
}

Si je comprends bien, ce code affiche les dossiers trouvés dans mon répertoire.

foreach($fichier as $lien) {
echo "\t\t\t<li><img src=\"$dir_nom/$lien \"></li>\n";
}

Par contre j'ai également une boucle sur les fichiers également, ce qui explique d'ailleurs pourquoi je vois le lien de chacun des fichiers dans le code source de la page générée.

J'espère ne pas faire un hors sujet ^^

En tout cas merci de votre aide.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 janv. 2020 à 21:19
Bonjour,

Déjà.. en ce qui conerne l'affichage aléatoire des images... cela peut provenir du cache de ton navigateur...
Donc.. vide le.

Ensuite, pour être sur d'avoir le bon chemin, transforme ton chemin relatif en absolu.
Avec, par exemple, la fonction realpath https://www.php.net/manual/fr/function.realpath.php

Reviens nous voir ensuite avec le code source GENERE (celui que tu peux visualiser dans ton navigateur après avoir affiché ta page et fais un CTRL+U )

NB: J'espère que le nom de tes images ne comportent pas de caractères spéciaux.. (idem pour les dossiers dans lequels elles se trouvent )
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 21:29
Bonjour jordane45,

1- Alors j'ai vidé mon cache et même changé de navigateur, cela n'a rien changé.
2- J'ai rajouté echo realpath('../../../photos/A') . PHP_EOL; --> Cela me renvoie D:\photos\A qui est le bon dossier attendu.
3- code source généré:
<p>Liste des images accessibles sur l'hebergeur : 

</p> <ul class=rien>
<li><img src="../../../photos/A/1.jpg "></li>
<li><img src="../../../photos/A/2.jpg "></li>
<li><img src="../../../photos/A/3.jpg "></li>
<li><img src="../../../photos/A/4.jpg "></li>
</ul>

4- J'ai renommé les photos au cas où en 1, 2, 3, 4. Les dossiers s'appellent donc photos et A donc sans caractère spéciaux.

Merci de ton aide
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 21:54
Tu n'as pas applique le realpath a ton code...
Sinon le chemin des images ne contiendrait plus de ../

tu remarquera également que tu as un espace en trop entre la fin du nom de ton image et les guillemets..
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 22:39
Ah ok effectivement j'avais pas compris ta demande.
J'ai rectifié et enlevé l'espace à la fin ce qui me donne:
D:\photos\A
<p>Liste des images accessibles sur l'hebergeur :

</p> <ul class=rien>
<li><img src="D:\photos\A/1.jpg"></li>
<li><img src="D:\photos\A/2.jpg"></li>
<li><img src="D:\photos\A/3.jpg"></li>
<li><img src="D:\photos\A/4.jpg"></li>
</ul>


Par contre toujours pas d'affichage de photos.
Le sens des / ou \ a-t-il une importance? Dans l'explorateur Windows cela ne semble pas le cas
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 22:55
Autre remarque: en copiant un des liens générés (par ex D:\photos\A/1.jpg) dans l'explorateur Windows, la photo s'ouvre bien. Les chemins ne semblent donc pas être en cause?

N'y a-t-il pas un paramétrage/option en lien avec l'affichage d'images sur Wamp ou ailleurs?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
16 janv. 2020 à 22:58
Déplace ton dossier photo dans le répertoire www de ton wamp
..
je pense que ça devrait beaucoup mieux marcher
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
Modifié le 16 janv. 2020 à 23:08
Pas de changement:
<p>Liste des images accessibles sur l'hebergeur : 

</p> <ul class=rien>
<li><img src="D:\wamp64\www\photos\A/1.jpg"></li>
<li><img src="D:\wamp64\www\photos\A/2.jpg"></li>
<li><img src="D:\wamp64\www\photos\A/3.jpg"></li>
<li><img src="D:\wamp64\www\photos\A/4.jpg"></li>
</ul>


Par contre en remettant sans le realpath cela fonctionne

<p>Liste des images accessibles sur l'hebergeur :

</p> <ul class=rien>
<li><img src="../photos/A/1.jpg"></li>
<li><img src="../photos/A/2.jpg"></li>
<li><img src="../photos/A/3.jpg"></li>
<li><img src="../photos/A/4.jpg"></li>
</ul>


Par contre n'y a-t-il pas un moyen d'accéder à un dossier qui n'est pas dans le répertoire de wamp? Le but était plutôt d'accéder à des photos d'un autre dossier plutôt que déplacer mes dossiers photos dans le répertoire de wamp.
0

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

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 janv. 2020 à 23:36
Et pour le coup, retire le realpath pour travailler avec le chemin relatif

En supposant que ton script se trouve à la racine du www ...
le script devient
$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
 
while($element = readdir($dir)) {
  if($element != '.' && $element != '..') {
    if (!is_dir($dir_nom.'/'.$element)) {
      $fichier[] = $element;
    }
  }
}
closedir($dir);
 
 echo "<p>Liste des dossiers accessibles dans '$dir_nom' :</p>";
 echo "<ul class='rien'>";
   foreach($fichier as $lien){
       echo "<li>
         <a href='$dir_nom/$lien'>
           <img src='$dir_nom/$lien' alt='$lien' style='width:200px;'></img>
         </a>
       </li>";
   }
 echo "</ul>";


Ce code n'affichera que les images directement présentes dans le dossier $dir_nom

Si tu veux également afficher les éventuels images qui se trouvent dans des sous dossiers il va falloir faire du récursif...


Un truc du genre
<?php
function getDirectory( $path = '.', $level = 0 ){ 
  $ignore = array( 'cgi-bin', '.', '..' ); 
  if( is_dir($path)){
    $dh = @opendir( $path ); 
    while( false !== ( $file = readdir( $dh ) ) ){     
      if( !in_array( $file, $ignore ) ){ 
        if( is_dir( "$path/$file" ) ){ 
           echo "$file"; 
           echo" <ul>";
          getDirectory( "$path/$file", ($level+1) );              
          echo "</ul>";
        } else {  
          echo"<li>";
          echo "<img src='$path/$file' style='width:100px;' alt='$file'></img><br />"; 
          echo"</li>";
        }            
      } 
    } 
    closedir( $dh ); 
  }else{
    echo "$path is not dir !";
  }
  // Open the directory to the handle $dh 
   
  
  // Close the directory handle 
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<?php
echo "Fichiers dans : ./images/";
  getDirectory('./photos/');
?>
</body>
</html>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 janv. 2020 à 23:37
PS: A l'avenir.. merci de poster ton code correctement en indiquant le LANGAGE dans les balises de code afin d'avoir la coloration syntaxique... comme les codes que je te poste.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
Modifié le 17 janv. 2020 à 00:10
C'est noté!
Alors en testant ta première partie de code, cela ne change pas le résultat, c'est à dire que dès que je veux afficher des photos d'un dossier hors du www de wamp, les photos ne s'affichent plus, ni même les dossiers présents.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 janv. 2020 à 00:32
C'est normal...
Et c'est pour ca que je t'ai fait déplacé tes dossiers dans le www

Pour accéder en dehors de ce dossier tu dois bidouiller le paramétrage apache... Mais là ce n'est plus une question php
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
Modifié le 17 janv. 2020 à 08:23
Ah ok merci je vais chercher du côté paramétrage alors.

Du coup j'en profite pour poser juste les questions programmation qui me restent:
- J'aime bien le rendu avec les photos plus petites d'affichées. Mais y a-t-il un moyen d'afficher les photos en mode tableau, donc plusieurs photos sur une même "ligne"?

- Mon serveur sera donc sur mon PC, qui se met en veille automatiquement. Y a-t-il un moyen de lancer un WOL pour réveiller le PC quand on essaie d'accéder au site? Côté paramétrage Apache aussi?

- Ton code fonctionne très bien mais affiche toutes les photos du dossier source et sous-dossier. Serait-il possible de n'afficher que les photos du dossier en cours, tout en affichant les dossiers existants afin de pouvoir naviguer dedans?

- Comment exclure un sous-dossier?

- Dernière question: Seules les photos sont affichées, est-il possible d'afficher des vidéos également?

Je sais que j'en demande beaucoup, je n'attends pas des réponses complètes mais au moins des pistes à creuser.

Merci beaucoup en tout cas!
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 janv. 2020 à 10:57

Ton code fonctionne très bien mais affiche toutes les photos du dossier source et sous-dossier. Serait-il possible de n'afficher que les photos du dossier en cours,

oui, en retirant le réccursif


Comment exclure un sous-dossier

Avec un iF ..


Dernière question: Seules les photos sont affichées, est-il possible d'afficher des vidéos également

Détécter l'extension du fichier
si image .. utiliser la balise img
Si vidéo .. utiliser la balise video
0
Damdam__33 Messages postés 21 Date d'inscription mercredi 29 août 2018 Statut Membre Dernière intervention 17 janvier 2020
17 janv. 2020 à 21:48
Merci jordane45 pour tes réponses
J'essaie de mettre tout ça en place avant de fermer le topic.
Bonne soirée.
0