readdir 2 dossier en même temps

branka
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 23:05

Bonjour à vous,

je fais appel à votre aide pour un problème qui m'occupe depuis 2 jours mais qui doit être plus simple avec plus de connaissances (je suis débutant ^^')
j'avais trouvé ce code afin de lister toutes les images d'un dossier pour ne pas avoir à taper manuellement le code à chaque fois (que j'utilise et qui fonctionne correctement) :
<? $dir="../"."$galerie"."/photos";
$dossier=opendir($dir);
while($fichier=readdir($dossier)){
$berk=array('.', '..', 'index.html');
if(!in_array($fichier,$berk)){
$lien=$dir.'/'.$fichier;
if(file_exists($lien)){
print '<img src="'.$lien.'" width="720" height="960">';
}}} ?>
qui me permet d'obtenir :
<img src="../riviere_spbrc/photos/IMG_9403 (Copier).JPG" width="720" height="960">
<img src="../riviere_spbrc/photos/IMG_9385 (Copier).JPG" width="720" height="960">
<img src="../riviere_spbrc/photos/IMG_9456 (Copier).JPG" width="720" height="960">
etc...

je voulais faire la même chose mais cette fois ci pour obtenir :
<a href="../abba/pages/1.php"><img class="iframe" src="../abba/thumb/1.png"></a>
<a href="../abba/pages/2.php"><img class="iframe" src="../abba/thumb/2.png"></a>
etc...

j'ai donc modifié le code :
<?
$dir="../abba/pages";
$dossier=opendir($dir);
while($fichier=readdir($dossier)){
$berk=array('.', '..', 'index.html');
if(!in_array($fichier,$berk)){
$lien=$dir.'/'.$fichier;
if(file_exists($lien)){
$dirimg="../abba/thumb";
$dossierthumb=opendir($dirimg);
while($fichierimg=readdir($dossierthumb)){
$berk=array('.', '..', 'index.html');
if(!in_array($fichierimg,$berk)){
$lienthumb=$dirimg.'/'.$fichierimg;
if(file_exists($lienthumb)){
print '<a href="'.$lien.'"><img class="iframe" src="'.$lienthumb.'"></a>';
}}}}}} ?>
mais j'obtiens ça :
<a href="../abba/pages/1.php"><img class="iframe" src="../abba/thumb/1.png"></a><a href="../abba/pages/1.php"><img class="iframe" src="../abba/thumb/2.png"></a><a href="../abba/pages/1.php"><img class="iframe" src="../abba/thumb/3.png"></a><a href="../abba/pages/1.php"><img class="iframe" src="../abba/thumb/4.png"></a><a href="../abba/pages/2.php"><img class="iframe" src="../abba/thumb/1.png"></a><a href="../abba/pages/2.php"><img class="iframe" src="../abba/thumb/2.png"></a><a href="../abba/pages/2.php"><img class="iframe" src="../abba/thumb/3.png"></a><a href="../abba/pages/2.php"><img class="iframe" src="../abba/thumb/4.png"></a>
etc...

voila je sèche un petit peu là et un petit peu d'aide serait la bienvenue ^^
en vous remerciant par avance

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2012, 23:07

Tu imbriques un while dans un autre, donc tu fais N fois le traitement du seconde while pour une itération du premier.
En gros si tu parcourais un tableau contenant : 1, 2
Cela donnerai :
1 1
1 2
2 1
2 2

J'espère qu'avec cet exemple tu comprendras ton erreur.

branka
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 23:20

bonsoir,

merci pour cette réponse rapide.
j'avais effectivement pensé à ça ce qui semblerait logique.
cependant je n'arrive à solutionner le problème.
ce que tu expliques signifie que le while devrait directement contenir les deux readdir ?
j'avais essayé ça également mais ça ne m'affiche plus rien du tout :'(
<?
$dir="../abba/pages";
$dirimg="../abba/thumb";
$dossier=opendir($dir);
$dossierthumb=opendir($dirimg);
while($fichier=readdir($dossier) && $fichierimg=readdir($dossierthumb)){
$berk=array('.', '..', 'index.html');
if(!in_array($fichier,$berk)){
$lien=$dir.'/'.$fichier;
if(!in_array($fichierimg,$berk)){
$lienthumb=$dirimg.'/'.$fichierimg;
if(file_exists($lien)){
if(file_exists($lienthumb)){
print '<a href="'.$lien.'"><img class="iframe" src="'.$lienthumb.'"></a>';
}
}
}
}
}
?>

branka
Invité n'ayant pas de compte PHPfrance

25 juil. 2012, 01:47

re bonsoir,

suite à la solution proposée j'ai creusé un peu, et en trouvant un autre script j'ai pu le modifier en comprenant le coup du while qui effectivement ne pouvait pas marcher...

je laisse le code complet si jamais ça intéresse (je pense qu'il peut être mieux, si d'ailleurs quelqu'un voit des améliorations qu'il n'hésite pas ^^)
il y a de plus une fonction de tri qui permettant d'automatiquement mettre la thumb 1 avec la vidéo 1 :
<?
$dir = "../"."abba"."/pages";
$dir2 = "../"."abba"."/thumb";
$liste = Array();
$od = opendir($dir);
$od2 = opendir($dir2);
$nb=0;
	while (false !== ($fic= readdir($od))) {
	 if($fic!= '.' && $fic!='..' && $fic!='index.html'){
		$liste[$nb] = $fic;
		$nb++;
	 }
	}
		while (false !== ($fic= readdir($od2))) {
	 if($fic!= '.' && $fic!='..' && $fic!='index.html'){
		$liste2[$nb] = $fic;
		$nb++;
	 }
	}
	sort($liste);
	sort($liste2);
	for($i=0;$i<count($liste);$i++){
		if($liste[$i] != '.' && $liste[$i] != '..' && $liste[$i] != 'index.html' ){
		$lu = $liste[$i];
		$lu2 = $liste2[$i];
		$lien=$dir.'/'.$lu;
		$lien2=$dir2.'/'.$lu2;
		print '<a href="'.$lien.'"><img class="iframe" src="'.$lien2.'"></a>';
		}
		}
		?>

ViPHP
xTG
ViPHP | 7331 Messages

25 juil. 2012, 08:50

Remplaces les short_tags : <? par <?php
Et ceci peut se simplifier :
$liste[$nb] = $fic;
$nb++;
// en
$liste[] = $fic;

branka
Invité n'ayant pas de compte PHPfrance

25 juil. 2012, 13:23

Bonjour,

merci pour les conseils je viens de les appliquer et effectivement ça fonctionne ^^