Affichage photos sur serveur web
Damdam__33
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
Damdam__33 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Damdam__33 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
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:
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 !
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:
- Affichage photos sur serveur web
- Partager des photos - Guide
- Web office - Guide
- Changer serveur dns - Guide
- Toutes mes photos - Guide
- Google photos - Télécharger - Albums photo
7 réponses
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 ? :-)
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 ? :-)
Damdam__33
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
Bonjour, je ne sais pas je ne connais pas cet usage mais je vais investiguer pour voir si ça convient
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
ce qui s'explique que si il trouve un dossier stock la variable dossier qui est un array
qui t'affiche le dossier pas les elements qui s'y trouvent
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
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.
Si je comprends bien, ce code affiche les dossiers trouvés dans mon répertoire.
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.
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.
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 )
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 )
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é:
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
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
Ah ok effectivement j'avais pas compris ta demande.
J'ai rectifié et enlevé l'espace à la fin ce qui me donne:
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
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
Pas de changement:
Par contre en remettant sans le realpath cela fonctionne
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.
<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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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>
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
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
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.
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.
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!
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!
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