8726 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

je cherche la solution pour afficher sur une page simple.php, tout les images de toute les galeries qui se trouve dans répertoire images

ça donne ça

- www/images/galeries

.../images/galeries/photos_1/
.../images/galeries/activite_2010/
.../images/galeries/foire_2/

...

ma page simple.php dois avoir la possibilité de tout lister tout les dossiers du répertoire galeries ...

ça peux affiche de manière aléatoire ou pas dossier ...

pour le moment j'ai trouver ce script php, mais ça affiche simplement le dossier que je définie ...

<?php
// url du fichier qui contient les images
$urlphoto = "http://www.url.com/images/galeries/foire_2";

// nom du répertoire qui contient les images
$nomRepertoire = "foire_2";
if (is_dir($nomRepertoire))
   {
   $dossier = opendir($nomRepertoire);
   while ($Fichier = readdir($dossier))
       {
      if ($Fichier != "." AND $Fichier != ".." AND (stristr($Fichier,'.gif') OR stristr($Fichier,'.jpg') OR stristr($Fichier,'.png') OR stristr($Fichier,'.bmp')))
        {
        // Hauteur de toutes les images
        $h_vign = "120";
        $taille = getimagesize($nomRepertoire."/".$Fichier);
        $reduc  = floor(($h_vign*100)/($taille[1]));
        $l_vign = floor(($taille[0]*$reduc)/100);
      
          echo '<a target="_blank" href="', $urlphoto, '/',$Fichier, '">';
          echo '<img src="', $urlphoto, '/',$Fichier, '" ';
          echo "width='$l_vign' height='$h_vign'>";
          echo "</a>&nbsp;";
          }
        }    
   closedir($dossier);
   }else{
   echo' Le répertoire spécifié n\'existe pas';
   }
?> 
<?php
// url du fichier qui contient les images
$urlphoto = "http://www.url.be/images/galeries/foire_2";

// nom du répertoire qui contient les images
$nomRepertoire = "foire_2";
if (is_dir($nomRepertoire))
   {
   $dossier = opendir($nomRepertoire);
   while ($Fichier = readdir($dossier))
       {
      if ($Fichier != "." AND $Fichier != ".." AND (stristr($Fichier,'.gif') OR stristr($Fichier,'.jpg') OR stristr($Fichier,'.png') OR stristr($Fichier,'.bmp')))
        {
        // Hauteur de toutes les images
        $h_vign = "120";
        $taille = getimagesize($nomRepertoire."/".$Fichier);
        $reduc  = floor(($h_vign*100)/($taille[1]));
        $l_vign = floor(($taille[0]*$reduc)/100);
      
          echo '<a target="_blank" href="', $urlphoto, '/',$Fichier, '">';
          echo '<img src="', $urlphoto, '/',$Fichier, '" ';
          echo "width='$l_vign' height='$h_vign'>";
          echo "</a>&nbsp;";
          }
        }    
   closedir($dossier);
   }else{
   echo' Le répertoire spécifié n\'existe pas';
   }
?> 


Merci d'avance

( je crois que mon précédent message a bugé)
bonsoir,

le code que vous avez proposé est vraiment intéressant, mais trop puissant Smiley smile

j'arrive a affiché tout les images avec ce code ...

echo '<li><a href="'.$href.'"><img src="'.$href.'" width="90" height="60" border="0"></a></li>'."\n";



function listDirs($Current_Path = '.', $extension = 'jpg') {



et au lieu de choisir pdf, j'ai listé les .jpg ...

:)

cependant, dans mon dossier galeries/nom_de_galerie, j'ai aussi les vignettes des images, un dossier nommé thumbs ..., je dois faire comprendre au script qu'il doit exclure tout les dossiers nommé thumbs, et affiché aucun autre fichier, php, html ou autre ...

merci pour votre réponse
Salut,
Un peu plus simple que le code du lien de Heyoan, je te conseille de regarder vers la fonction php "glob": http://php.net/manual/fr/function.glob.php

Qui sert justement à lister les éléments d'un dossier

Par exemple:
$files = glob('mon_dossier/*.gif');

Mettra dans le tableau $files tous les chemins des fichiers "gif" présents dans "mon_dossier".

Et pour afficher la liste:
foreach($files as $filename){echo $filename;}



Dans ton cas tu peux utiliser cette fonction (qui se trouve sur la page du lien ci-dessus):


function scandir_through($dir)
{
    $items = glob($dir . '/*');

    for ($i = 0; $i < count($items); $i++) {
        if (is_dir($items[$i])) {
            $add = glob($items[$i] . '/*');
            $items = array_merge($items, $add);
            scandir_through($items[$i]);
        }
    }

    return $items;
}

$dir='.';//nom-du-repertoire-a-lister

echo '<h1>List des fichiers dans le repertoire "'.$dir.'/"</h1><ul>';
foreach(scandir_through($dir) as $key=>$filename){echo '<li>'.$filename.'</li>';}
echo '</ul>';

Modifié par davidito (14 Oct 2010 - 23:27)
Si tu ne veux pas montrer l'arborescence des dossiers le code que je te proposais n'est effectivement pas adapté.

Un exemple avec glob :
class listPictures {
	private $extensions = 'jpg,jpeg,gif,png';  // extensions des images à lister
	private $folders_to_omit = array();  // tableau des répertoires à exclure de la recherche
	private $folders = array();  // tableau des répertoires à analyser
	private $files = array();  // tableau des fichiers
	
	public function __construct($path = '.', $folders_to_omit = array(), $extensions = array()) {
		$this->folders[] = $path;
		if(!empty($extensions) && is_array($extensions)) {
			$this->extensions = implode(',', $extensions);
		}
		$this->folders_to_omit = $folders_to_omit;
		$this->getFolders($path);
		$this->displayPictures();
	}
	private function getFolders($current_path) {
		$folders = glob($current_path . '/*', GLOB_ONLYDIR);
		foreach($folders as $folder) {
			if(!in_array(basename($folder), $this->folders_to_omit)) {
				$this->folders[] = $folder;
				$this->getFolders($folder);
			}
		}
	}
	private function displayPictures() {
		foreach($this->folders as $folder) {
			foreach(glob($folder.'/*.{'.$this->extensions.'}', GLOB_BRACE) as $filename) {
				echo '<p><img src="'.$filename.'" alt="'.basename($filename).'" /></p>';
			}
		}
	}
}

set_time_limit(0);
$path = 'images/galeries';
$folders_to_omit = array('Thumbs', 'AutreRepertoire');
$listFiles = new listPictures($path, $folders_to_omit); 
//$extensions = array('gif', 'png');
//$listFiles = new listPictures($path, $folders_to_omit, $extensions); 
Hello @tous

Propos à partir du script de heyoan

J'ai beau essayé mais j'arrive toujours à une feuille blanche avec aucun chargement d'images.
Une feuille Blanche ? donc aucune erreur de script.

Cependant si je lance vers des données brutes ça donne ceci

ListeImages Object
(
    [extensions:ListeImages:private] => jpg, jpeg, gif, png, bmp
    [dossiersExclus:ListeImages:private] => Array
        (
            [0] => _notes1
            [1] => _notes2
            [2] => _notes3
        )

    [dossiers:ListeImages:private] => Array
        (
            [0] => images/png
        )

    [fichiers:ListeImages:private] => Array
        (
        )
)

Comme vous pouvez le constater toute est fonctionnelle sauf le dernier array. En effet celui-ci ne charge pas le listing du répertoire en données brutes.

Ce array [fichiers:ListeImages:private] est vide - Soyez assurer que mon répertoire est plein.
Ce array vide == feuille blanche : n'est-ce pas ?

J'ai beau chercher j'ai pas trouver de solutions. Si ça charge pas en données brutes ça charge pas les images au navigateur.

Seul le premier array « extensions » prend ses données directement de la classe. Les trois autres (quoique ce sont des propriétés de classe) puisent leurs données du fichier de lancement.

Poutant tout est fonctionnel et preuve à l'appui je soustrait un dossier exclu du array (_notes3)

ListeImages Object
(
    [extensions:ListeImages:private] => jpg, jpeg, gif, png, bmp
    [dossiersExclus:ListeImages:private] => Array
        (
            [0] => _notes1
            [1] => _notes2
        )

    [dossiers:ListeImages:private] => Array
        (
            [0] => images/png
            [1] => images/png/_notes3
        )

    [fichiers:ListeImages:private] => Array
        (
        )

)

Celui-ci se retrouve là où il se doit : dans le array des [dossiers:ListeImages:private].
J'ai besoin d'être éclairer : pourquoi ça ne charge pas les images du répertoire « png » au navigateur ? Alors que mon pointeur est dedans.

En te remerciant aussi heyoan. Un code intéressant en tout cas.

++
Modifié par zardoz (15 Oct 2010 - 08:03)
Bonjour à tous Smiley smile

merci pour votre participation, merci Heyoan, davidito pour votre aide Smiley smile

Heyoan, j'utilise le script que vous avez proposer, mais je reçois une erreur de ce type

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /homez.333/we/www/wp-content/gallery/img1.php on line 3


voici mon arborescence

index.php
galeries/repertoire_1
galeries/repertoire_2

...

Merci d'avance
Modifié par IVIedia (15 Oct 2010 - 19:49)
salut

La spl fait çà très bien. opendir c'est bien mais la spl est bien plus puissante et
nous fait économiser toutes ces lignes de tests. De plus, php 5.3 en fait maintenant
un package de base, alors... exemple

une classe filtre étendant filterRecursiveIterator qui peut filtrer tout objet implémentant
RecursiveIterator, içi, RecursiveDirectoryIterator. Couplée avec SplFileInfo c'est une tuerie.

16/10 00:09 mise à jour du code pour prendre en compte le filtrage des dossiers

juste pour celles et ceux que çà intérésse

je met à jour le code de la classe qui filtre maintenant les dossiers avec ajout d'un membre array contenant le/les dossiers à filtrer. Donc elle filtre maintenant les dossiers et les fichiers par extensions. Un booleen précise si le filtre des dossiers doit être actif, true par défaut. Merci à tous car çà m'aura permis de mettre ce code à jour. Vous l'aurez compris c'est dans la méthode accept() que réside le secret. Elle est donc à modifier selon les besoins. Toute classe qui hérite de FilterIterator doit surcharger cette méthode.


class FiltreRecursif extends RecursiveFilterIterator {
    private $_Iterateur;
    private $_TabExtensions = array();
    private $_TabDossierAFiltrer = array();
    private $_BoolFiltreDossier;
	
    /**
     * Attend un objet implémentant l'interface RecursiveIterator, un tableau
     * d'extensions sans le point et un tableau de dossiers à filtrer.
     * 
     * @param $iterateur
     * @param $tab_extensions
     * @param $tab_dossier
     */
	function  __construct(RecursiveIterator $iterateur, array $tab_extensions, array $tab_dossier, $bool_dossier = true) {
		if ($iterateur instanceof RecursiveIterator)
        	$this->_Iterateur = $iterateur;
        else throw new InvalidArgumentException('Cet objet n\'est pas une instance de RecursiveIterator');
        if (is_array($tab_extensions))
        	$this->_TabExtensions = $tab_extensions;
        else throw new InvalidArgumentException('Le paramètre 2 n\'est pas un tableau');
        if (is_array($tab_dossier))
        	$this->_TabDossierAFiltrer = $tab_dossier;
        else throw new InvalidArgumentException('Le paramètre 3 n\'est pas un tableau');
        if (is_bool($bool_dossier))
        	$this->_BoolFiltreDossier = $bool_dossier;
        else $this->_BoolFiltreDossier = true;
        parent::__construct($this->_Iterateur);
    }
	
    /**
     * Filtre qui n'accepte que les extensions du tableau et les dossiers.
     * Les dossiers à exclure sont compris dans un tableau lui aussi.Tres efficace.
     */
    function  accept() {
    	if ($this->_BoolFiltreDossier === true) {
	    	if ($this->hasChildren() && !in_array(pathinfo($this->current(),PATHINFO_BASENAME),$this->_TabDossierAFiltrer))
	    		return true;
	        else return in_array(pathinfo($this->current(), PATHINFO_EXTENSION), $this->_TabExtensions);
    	} else return ($this->hasChildren() || in_array(pathinfo($this->current(), PATHINFO_EXTENSION), $this->_TabExtensions));
    }
    
    /**
     * Si l'élément courant contient des enfants sur lesquels itérer, appel récursif
     * de la classe avec ses paramètres.
     */
    function  getChildren() {
        return new self($this->getInnerIterator()->getChildren(), $this->_TabExtensions, $this->_TabDossierAFiltrer,$this->_BoolFiltreDossier);
    }
}
$racine = 'skins/defaut/tests';  
try {     
	$filtre = new RecursiveDirectoryIterator($racine);     
	try {
		// ne filtre que les fichiers        
		$filtres = new FiltreRecursif($filtre,array('jp*g','gif','png'),array(),false);
		// filtre les fichiers et les dossiers, içi thumbs sera ignoré ainsi que les fichiers
		//et dossiers qu'il contient
		//$filtres = new FiltreRecursif($filtre,array('jp*g','gif','png'),array('thumbs'));         
		/* 
		 * RecursiveIteratorIterator::SELF_FIRST pour que les dossiers soit pris en compte
		 * retirer cette constante ne retourne que les fichiers.
		 */   
		foreach (new RecursiveIteratorIterator($filtres,RecursiveIteratorIterator::SELF_FIRST) as $v) {
			/*
			 * // pour tester la sortie
			 * echo '<pre>';
			 * print_r($v);
			 * echo '</pre>';
			 */
			if ($v->isDir())      
				echo 'Dossier : '.strtr($v,'\\','/').'<br />'; 
			else echo 'Fichier : '.strtr($v,'\\','/').'<br />'; 
		}     
	} catch (InvalidArgumentException $spl) { echo $spl->__toString(); } 
} catch (Exception $e) { echo $e->__toString(); } 


enjoy! Smiley cligne
Modifié par keran (16 Oct 2010 - 00:18)
bonjour keran, je ne comprends pas comment utilisé le code que vous avez laissé ...`

ici le but, c'est de lister le dossier galeries, et ses sous dossier, et dire que le dossier thumbs et fichier php ou autre ne dois pas être listé

Merci pour intervation

IVIedia
Salut zardoz,

zardoz a écrit :
J'ai besoin d'être éclairer : pourquoi ça ne charge pas les images du répertoire « png » au navigateur ?
Comme je suis parti d'un script que j'utilisais, j'ai oublié d'enlever la variable $files que je n'alimente plus : affichage direct dans la méthode displayPictures.

Vu que tu as francisé le nom de la classe, des variables et, je suppose, des méthodes es-tu bien sûr d'appeler l'équivalent de displayPictures ?

@keran > Merci pour ce joli code : je vais aller me renseigner sur SPL ! Smiley cligne
Salutation

@heyoan

Je vais vérifier aujourd'hui et je te tiens au courant. En principe ça ne devrais pas être difficile à réparer.

De plus je veux essayer le nouveau script de keran.

++
Modifié par zardoz (15 Oct 2010 - 18:42)
Salut,
Je poste une amélioration (qui n'est certes pas aussi pointu que les scripts de Heyoan et Keyra) de mon code précédent avec filtrage suivant le type de fichier. Le script affiche la liste des fichiers du dossier $dossier_principal dont les types sont définis dans $extensions.



// Fonction de selection des fichiers suivant les extensions predeterminées avec $extensions
function addphoto($dir,$extensions,$photos=array()){
	
	foreach($extensions as $ext){
		$addphoto = glob($dir . '/*.'.$ext); // selectionne les photos contenues du dossier
		$photos =  array_merge($photos, $addphoto); // ajoute les photos au tableau de resultats
	}
	return $photos;
}

// Fonction de parcours du dossier
function scandir_through($dir,$extensions,$photos=array()){

    $photos = addphoto($dir,$extensions,$photos); // lance la fonction addphoto de selection des photos du dossier (concerne le dossier principal, si il contient pas d'images, tu peux supprimer cette ligne)
	$items = glob($dir . '/*'); // selectionne le contenu de $dir

    for ($i = 0; $i < count($items); $i++) { // parcours du contenu de $dir
        if (is_dir($items[$i])) { // si le contenu est un dossier		
			$photos = addphoto($items[$i],$extensions,$photos); // lance la fonction addphoto de selection des photos du dossier	
			scandir_through($items[$i],$extensions,$photos); // lance la fonction scandir_through pour parcourir le dossier
        }
    }

    return $photos;
}

/*VARIABLES A ADAPTER A TON CAS*/
$dossier_principal='images';//nom du repertoire a lister
$extensions = array('png','gif','jpg','jpeg'); // tableau des extensions d'images a selectionner: Rajouter ou enlever des extensions


echo '<h1>Listing du dossier "'.$dossier_principal.'/" et de ses sous-dossiers</h1><ul>';
foreach(scandir_through($dossier_principal,$extensions) as $key=>$filename){echo '<li>'.$filename.'</li>';}
echo '</ul>';

Super davidito, votre script et opérationnel Smiley smile , c'est pile poil ce que je voulais avoir Smiley smile

ça liste tout les sous dossier des images/ et je peux définir leur extension , coool

avec ce genre de code, on peux définir ça ...

affiche moi tout les sous dossiers du dossier images, mais les résultat ça doit être aléatoire c'est à dire, qu'il doit pas avoir un sens de l'ordre, ça doit être en désordre Smiley smile

Merci à vous tous, ça fait plaisir Smiley smile
bon week end

Smiley lol
@IVIedia

a écrit :
ici le but, c'est de lister le dossier galeries, et ses sous dossier, et dire que le dossier thumbs et fichier php ou autre ne dois pas être listé


C'est ce que fait ce code;) Ni plus ni moins...
Modifié par keran (16 Oct 2010 - 00:23)
Merci Keran, quand je test votre code, je reçois ce message

Parse error: syntax error, unexpected '{' in /homez.333/we/www/wp-content/demo2.php on line 3


Smiley rolleyes
<< heyoan

a écrit :
@keran > Merci pour ce joli code : je vais aller me renseigner sur SPL !


de rien et n'hésite pas c'est ultra puissant mais malheureusement trop méconnue Smiley decu

c'est vrai aussi que ce n'est pas spécialement simple d'accès, encore que, après quelques efforts et tests, on maitrise un outil, je le redit, ultra puissant et qui nous fait économiser bien des tests et de nombreuses lignes de codes. C'est cette page qui m'à convaincu.

julien-pauli.developpez.com

d'autres choses interéssantes içi

francois lajoie

en francais c'est malheureusement à peu près tout mais c'est du tout bon, pour comprendre.

si çà peut aider la spl à se faire découvrir un peu plus, c'est avec plaisir. Après chacun est libre, procédural, objet, à chacun de choisir ce avec quoi il est le plus à l'aise. Perso, j'aime bien l'aspect objet de php 5.
IVIedia a écrit :
Merci Keran, quand je test votre code, je reçois ce message

Parse error: syntax error, unexpected '{' in /homez.333/we/www/wp-content/demo2.php on line 3


Smiley rolleyes


erreur de ta part, parce que moi je n'en ai pas, j'ai tester avant.

edit du 16/10 code maj plus haut pour ajout de fonctions
Modifié par keran (16 Oct 2010 - 00:28)
je ne comprends pas, je fait un copier collé de votre code, ça ne marche toujours pas

je met bien <?php et ensuite ?> a la fin et entre votre code , voici en capture

...

upload/12945-Capturedec.png
sur ta copie d'écran, il manque un bracket { sur la ligne foreach

erreur de copier/coller Smiley cligne

tu peux aussi supprimer les deux slashs lignes 23, çà c'est moi Smiley biggrin
Modifié par keran (15 Oct 2010 - 20:34)
Pages :