|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
GALLERIE D'IMAGE CONSTRUITE PAR APPELS RÉCURSIFS DANS UN RÉPERTOIRE
Information sur la source
Description
Mise en place d'une méthode de parcours de répertoire par appels récursif permettant la mise en ligne d'une gallerie d'images situées dans un répertoire et ses sous-répertoires. Pour le moment, il n'est implémenté que pour les photos et images. Il est destiné à s'enrichir avec la gestion de différents types de fichiers.
La seule chose à faire est la définition de la constante ROOT en début de code pour donner le répertoire de base de parcours et la limite au dessus de laquelle les visiteurs ne pourront pas aller.
Update du 01/04/2006 :
- Ajout d'une méthode de tri simple sur les sous-répertoires et les fichiers
- Ajout d'un méthode de définition de la constante ROOT en fonction de l'utilisateur connecté (id : Apache / Mandriva par htaccess)
- Intégration dans une archive ZIP contenant les 2 fichiers PHP et le fichier CSS
- Ajout d'un test pour eviter le cross scripting sur le nom du fichier
Source
- //////////////////////////////////////////
- // DEFINITION DU FICHIER PRINCIPAL DEFINEROOTS.INC.PHP
- //////////////////////////////////////////
- <?PHP
-
- //Définition des ROOT par usr
-
- $tbRoots = array('MICHEL' => 'Photos',
- 'VISITEUR' => 'Photos/Divers',
- '' => '');
- ?>
-
- //////////////////////////////////////////
- // DEFINITION DU FICHIER PRINCIPAL INDEX.PHP
- //////////////////////////////////////////
- <?PHP
- /*
- Date : 30/03/2006
- Auteur : The_Legacy
- Description :
- Mise en place d'une méthode de parcours de répertoire par appels récursif
- permettant la mise en ligne d'une gallerie d'images situées dans un répertoire et ses sous-répertoires.
- Pour le moment, il n'est implémenté que pour les photos et images. Il est destiné à s'enrichir
- avec la gestion de différents types de fichiers.
- */
- include_once "defineRoots.inc.php";
- define('ROOT', $tbRoots[strtoupper($_SERVER['PHP_AUTH_USER'])]); //Définition du répertoire à partir duquel on désire travail et corrspond également à la limite haute de l'arborescence
-
- function TableauTrie($tab)
- {
- //Méthode simple du tri par permutation
- $nbElements = count($tab);
- do
- {
- $objTemp = null;
- $idx = 0;
- $permutation = false;
- while ($idx < $nbElements - 1)
- {
- if (strtoupper($tab[$idx]->nom) > strtoupper($tab[$idx + 1]->nom))
- {
- if (!$permutation)
- {
- $permutation = true;
- }
- $objTemp = $tab[$idx];
- $tab[$idx] = $tab[$idx + 1];
- $tab[$idx + 1] = $objTemp;
- }
- $idx++;
- }
- }while ($permutation);
- return $tab;
- }
-
- class Fichier
- {
- //Définition d'un objet fichier contenant simplement son nom et son chemin
- public $nom = '';
- public $chemin = '';
-
- function Fichier($chemin)
- {
- $this->chemin = $chemin;
-
- $tbChemin = explode("/", $chemin);
- $this->nom = $tbChemin[count($tbChemin) - 1];
- }
- }
-
- class repertoire
- {
-
- /*
- L'objet réperoire contient un tableau d'objets REPERTOIRE correspondants aux sous-répertoire de celui désiré
- et un autre tableau d'objets FICHIER correspondants aux fichiers contenus dans le répertoire désiré
- */
-
- public $nom = '';
- public $chemin = '';
-
- public $tbSRep = array();
- public $tbFiles = array();
-
- function repertoire($chemin, $descendre = true)
- {
- /*
- Le deuxième paramètre du constructeur donne la limite de l'appel récursif
- s'il est mis à true, cela signifie que l'appel récursif déscendra d'un niveau dans l'arborescence et listera
- les sous-répertoires de l'élément analysé
- */
-
- if (is_dir($chemin)) //Vérifier si le chemin existe et est bien un répertoire
- {
- //Remplissage des propriétés de l'objet
- $this->chemin = $chemin;
-
- $tbChemin = explode("/", $chemin);
- $this->nom = $tbChemin[count($tbChemin) - 1];
-
- //Récupération des sous-répertoires
- $lptRep = opendir($this->chemin); //Ouverture du répertoire désiré
- $tbRepANePasLister = array('.', '..'); //Liste des sous-répertoires à ne pas lister
- $tbExtANePasLister = array('db'); //Liste des extensions de fichiers à ne pas lister
- while (false !== ($obj = readdir($lptRep))) //Parcours des objets contenus dans le répertoire désiré
- {
- if (!in_array($obj, $tbRepANePasLister)) //Vérification de la non présence de l'élément dans les éléments à ne pas lister
- {
- $cheminObj = $this->chemin.'/'.$obj;
- if (is_dir($cheminObj)) //Si l'élément est un répertoire, le mettre dans le tableau des sous répertoires
- {
- if ($descendre)
- {
- //Appel récursif sur le sous-répertoire en cours
- //Ici, je ne désire pas rentrer dans les sous-répertoires
- $this->tbSRep[] = new repertoire($cheminObj, false);
- }
- }
-
- if (is_file($cheminObj)) //Si l'élément est un fichier, je le mets dans le tableau des fichiers
- {
- /*
- Je construit un tableau contenant les éléments consituant le nom de l'objet en cours
- en général, 2 case : le nom sans l'extension puis l'extension.
- */
- $tbInfosFichiers = explode('.', $obj);
- if (!in_array($tbInfosFichiers[count($tbInfosFichiers) - 1], $tbExtANePasLister))
- {
- //Ajout de l'objet fichier correspondant
- $this->tbFiles[] = new Fichier($cheminObj);
- }
- }
- }
- }
- closedir($lptRep); //Fermeture du répertoire désiré
- }
- else
- {
- die("Le chemin spécifié n'est pas un répertoire !");
- }
- }
-
- function AfficheArborescence($niveau = 1)
- {
- //Parcours tous les sous-répertoires du répertoire en cours
- //Le paramètre donné peut permettre d'effectuer un affichage décalé des sous-répertoire en fonction du niveau
- //Par exemple en ajoutant (niveau) fois un espace devant le lien
- //Le premier test permet de ne pas afficher le nom du répertoire en cours
- if ($niveau > 1)
- {
- //Construction du lien pour le répertoire concerné par l'appel récursif
- print '<A href="?REP='.$this->chemin.'">'.$this->nom.'</A><BR>';
- }
-
- //Affichage des sous-répertoires
- for ($i = 0; $i < count($this->tbSRep); $i++)
- {
- //Appel récursif pour l'affichage
- $srep = $this->tbSRep[$i];
- $srep->AfficheArborescence($niveau + 1);
- }
- }
-
- function ListeFichiers()
- {
- //Construction du lien pour les fichiers
- if (count($this->tbFiles) > 0)
- {
- foreach ($this->tbFiles as $fichier)
- {
- print '<A href="?'.$_SERVER['QUERY_STRING'].'&file='.$fichier->chemin.'">'.$fichier->nom.'</A><BR>';
- }
- }
- }
-
- function LienParent()
- {
- //permet d'afficher le lien pour remonter au répertoire parent de celui consulté
- //Le premier test permet de ne pas donner la possibilité de remonter au dessus d'un certain répertoire
- //Dans mon cas le répertoire parent de ROOT est ma racine du serveur Web, je ne désire pas que mes
- //visiteurs puissent y accéder
- //Je suis en train de travailler sur la création dynamique du ROOT en fonction du visiteur
- //Pour éviter par exemple que mes amis n'accèdent à mes photos de famille et inversement
- if ($this->chemin != ROOT)
- {
- //Les 3 lignes qui suivent enlèvent le répertoire en cours du chemin de retour, pour remonter d'un seul niveau
- $tbPath = explode('/', $this->chemin);
- array_splice($tbPath, count($tbPath) - 1);
- $pathOrigine = implode('/', $tbPath);
-
- print '<A href="?REP='.$pathOrigine.'">Retour</A><BR>';
- }
- else
- {
- //Blanc pour remplir la case du tableau affiché en cas d'inexistence (ou d'inaccessibilité) du répertoire parent
- print " ";
- }
- }
- }
-
- //Récupération des paramètres
- if (isset($_GET['REP']))
- {
- $path = $_GET['REP'];
- }
- else
- {
- $path = ROOT;
- }
-
- $rep = new repertoire($path);
-
- //Tri des tableaux
- $rep->tbSRep = TableauTrie($rep->tbSRep);
- $rep->tbFiles = TableauTrie($rep->tbFiles);
-
- $dimensionOrigine = '';
- if (isset($_GET['file']) AND is_file($_GET['file']))
- {
- //Pour redimensionner l'image pour un affichage plus "visible"
- //De manière à en garder le rapport hauteur * largeur
- //J'utilise cette méthode pour ne pas déformer les photos prises en hauteur en attendant de savoir retourner dynamiquement une photo
- $image = $_GET['file'];
- $tbInfos = getimagesize($image);
- $largeurDesiree = 640;
- $hauteurDesiree = ($largeurDesiree * $tbInfos[1]) / $tbInfos[0];
- $hauteur = $tbInfos[1] * ((($hauteurDesiree * 100) / $tbInfos[1]) / 100);
- $largeur = $tbInfos[0] * ((($largeurDesiree * 100) / $tbInfos[0]) / 100);
-
- //Pour afficher les dimensions originales de l'image
- $dimensionOrigine = 'Hauteur réelle : '.$tbInfos[1].' pixels Largeur réelle : '.$tbInfos[0].' pixels';
- }
- ?>
-
- <HTML>
- <HEAD>
- <TITLE>Les photos</TITLE>
- <LINK href="styles.css" type="text/css" rel="stylesheet">
- </HEAD>
- <BODY style="text-align:center">
- <TABLE width="100%">
- <TR valign="top">
- <TD colspan="2" align="left">
- <SPAN class="tabmenus"><?=$path;?></SPAN>
- </TD>
- </TR>
- <TR>
- <TD width="200px" nowrap>
- <TABLE height="100%" width="100%" border="1">
- <TR>
- <TD height="20"><?=$rep->LienParent();?></TD>
- </TR>
- <TR>
- <TD><I>Répertoires :</I><BR><BR><?=$rep->AfficheArborescence();?></TD>
- </TR>
- <TR>
- <TD><I>Images : </I><BR><BR><?=$rep->ListeFichiers();?></TD>
- </TR>
- </TABLE>
- </TD>
- <TD valign="top">
- <?PHP
- if (isset($_GET['file']) AND is_file($_GET['file']))
- {
- print $dimensionOrigine.'<BR>';
- ?>
- <IMG id="img" src="<?=$image?>" border="0" width="<?=$largeur?>" height="<?=$hauteur?>">
- <?PHP
- }
- ?>
- </TD>
- </TR>
- </TABLE>
- </BODY>
- </HTML>
//////////////////////////////////////////
// DEFINITION DU FICHIER PRINCIPAL DEFINEROOTS.INC.PHP
//////////////////////////////////////////
<?PHP
//Définition des ROOT par usr
$tbRoots = array('MICHEL' => 'Photos',
'VISITEUR' => 'Photos/Divers',
'' => '');
?>
//////////////////////////////////////////
// DEFINITION DU FICHIER PRINCIPAL INDEX.PHP
//////////////////////////////////////////
<?PHP
/*
Date : 30/03/2006
Auteur : The_Legacy
Description :
Mise en place d'une méthode de parcours de répertoire par appels récursif
permettant la mise en ligne d'une gallerie d'images situées dans un répertoire et ses sous-répertoires.
Pour le moment, il n'est implémenté que pour les photos et images. Il est destiné à s'enrichir
avec la gestion de différents types de fichiers.
*/
include_once "defineRoots.inc.php";
define('ROOT', $tbRoots[strtoupper($_SERVER['PHP_AUTH_USER'])]); //Définition du répertoire à partir duquel on désire travail et corrspond également à la limite haute de l'arborescence
function TableauTrie($tab)
{
//Méthode simple du tri par permutation
$nbElements = count($tab);
do
{
$objTemp = null;
$idx = 0;
$permutation = false;
while ($idx < $nbElements - 1)
{
if (strtoupper($tab[$idx]->nom) > strtoupper($tab[$idx + 1]->nom))
{
if (!$permutation)
{
$permutation = true;
}
$objTemp = $tab[$idx];
$tab[$idx] = $tab[$idx + 1];
$tab[$idx + 1] = $objTemp;
}
$idx++;
}
}while ($permutation);
return $tab;
}
class Fichier
{
//Définition d'un objet fichier contenant simplement son nom et son chemin
public $nom = '';
public $chemin = '';
function Fichier($chemin)
{
$this->chemin = $chemin;
$tbChemin = explode("/", $chemin);
$this->nom = $tbChemin[count($tbChemin) - 1];
}
}
class repertoire
{
/*
L'objet réperoire contient un tableau d'objets REPERTOIRE correspondants aux sous-répertoire de celui désiré
et un autre tableau d'objets FICHIER correspondants aux fichiers contenus dans le répertoire désiré
*/
public $nom = '';
public $chemin = '';
public $tbSRep = array();
public $tbFiles = array();
function repertoire($chemin, $descendre = true)
{
/*
Le deuxième paramètre du constructeur donne la limite de l'appel récursif
s'il est mis à true, cela signifie que l'appel récursif déscendra d'un niveau dans l'arborescence et listera
les sous-répertoires de l'élément analysé
*/
if (is_dir($chemin)) //Vérifier si le chemin existe et est bien un répertoire
{
//Remplissage des propriétés de l'objet
$this->chemin = $chemin;
$tbChemin = explode("/", $chemin);
$this->nom = $tbChemin[count($tbChemin) - 1];
//Récupération des sous-répertoires
$lptRep = opendir($this->chemin); //Ouverture du répertoire désiré
$tbRepANePasLister = array('.', '..'); //Liste des sous-répertoires à ne pas lister
$tbExtANePasLister = array('db'); //Liste des extensions de fichiers à ne pas lister
while (false !== ($obj = readdir($lptRep))) //Parcours des objets contenus dans le répertoire désiré
{
if (!in_array($obj, $tbRepANePasLister)) //Vérification de la non présence de l'élément dans les éléments à ne pas lister
{
$cheminObj = $this->chemin.'/'.$obj;
if (is_dir($cheminObj)) //Si l'élément est un répertoire, le mettre dans le tableau des sous répertoires
{
if ($descendre)
{
//Appel récursif sur le sous-répertoire en cours
//Ici, je ne désire pas rentrer dans les sous-répertoires
$this->tbSRep[] = new repertoire($cheminObj, false);
}
}
if (is_file($cheminObj)) //Si l'élément est un fichier, je le mets dans le tableau des fichiers
{
/*
Je construit un tableau contenant les éléments consituant le nom de l'objet en cours
en général, 2 case : le nom sans l'extension puis l'extension.
*/
$tbInfosFichiers = explode('.', $obj);
if (!in_array($tbInfosFichiers[count($tbInfosFichiers) - 1], $tbExtANePasLister))
{
//Ajout de l'objet fichier correspondant
$this->tbFiles[] = new Fichier($cheminObj);
}
}
}
}
closedir($lptRep); //Fermeture du répertoire désiré
}
else
{
die("Le chemin spécifié n'est pas un répertoire !");
}
}
function AfficheArborescence($niveau = 1)
{
//Parcours tous les sous-répertoires du répertoire en cours
//Le paramètre donné peut permettre d'effectuer un affichage décalé des sous-répertoire en fonction du niveau
//Par exemple en ajoutant (niveau) fois un espace devant le lien
//Le premier test permet de ne pas afficher le nom du répertoire en cours
if ($niveau > 1)
{
//Construction du lien pour le répertoire concerné par l'appel récursif
print '<A href="?REP='.$this->chemin.'">'.$this->nom.'</A><BR>';
}
//Affichage des sous-répertoires
for ($i = 0; $i < count($this->tbSRep); $i++)
{
//Appel récursif pour l'affichage
$srep = $this->tbSRep[$i];
$srep->AfficheArborescence($niveau + 1);
}
}
function ListeFichiers()
{
//Construction du lien pour les fichiers
if (count($this->tbFiles) > 0)
{
foreach ($this->tbFiles as $fichier)
{
print '<A href="?'.$_SERVER['QUERY_STRING'].'&file='.$fichier->chemin.'">'.$fichier->nom.'</A><BR>';
}
}
}
function LienParent()
{
//permet d'afficher le lien pour remonter au répertoire parent de celui consulté
//Le premier test permet de ne pas donner la possibilité de remonter au dessus d'un certain répertoire
//Dans mon cas le répertoire parent de ROOT est ma racine du serveur Web, je ne désire pas que mes
//visiteurs puissent y accéder
//Je suis en train de travailler sur la création dynamique du ROOT en fonction du visiteur
//Pour éviter par exemple que mes amis n'accèdent à mes photos de famille et inversement
if ($this->chemin != ROOT)
{
//Les 3 lignes qui suivent enlèvent le répertoire en cours du chemin de retour, pour remonter d'un seul niveau
$tbPath = explode('/', $this->chemin);
array_splice($tbPath, count($tbPath) - 1);
$pathOrigine = implode('/', $tbPath);
print '<A href="?REP='.$pathOrigine.'">Retour</A><BR>';
}
else
{
//Blanc pour remplir la case du tableau affiché en cas d'inexistence (ou d'inaccessibilité) du répertoire parent
print " ";
}
}
}
//Récupération des paramètres
if (isset($_GET['REP']))
{
$path = $_GET['REP'];
}
else
{
$path = ROOT;
}
$rep = new repertoire($path);
//Tri des tableaux
$rep->tbSRep = TableauTrie($rep->tbSRep);
$rep->tbFiles = TableauTrie($rep->tbFiles);
$dimensionOrigine = '';
if (isset($_GET['file']) AND is_file($_GET['file']))
{
//Pour redimensionner l'image pour un affichage plus "visible"
//De manière à en garder le rapport hauteur * largeur
//J'utilise cette méthode pour ne pas déformer les photos prises en hauteur en attendant de savoir retourner dynamiquement une photo
$image = $_GET['file'];
$tbInfos = getimagesize($image);
$largeurDesiree = 640;
$hauteurDesiree = ($largeurDesiree * $tbInfos[1]) / $tbInfos[0];
$hauteur = $tbInfos[1] * ((($hauteurDesiree * 100) / $tbInfos[1]) / 100);
$largeur = $tbInfos[0] * ((($largeurDesiree * 100) / $tbInfos[0]) / 100);
//Pour afficher les dimensions originales de l'image
$dimensionOrigine = 'Hauteur réelle : '.$tbInfos[1].' pixels Largeur réelle : '.$tbInfos[0].' pixels';
}
?>
<HTML>
<HEAD>
<TITLE>Les photos</TITLE>
<LINK href="styles.css" type="text/css" rel="stylesheet">
</HEAD>
<BODY style="text-align:center">
<TABLE width="100%">
<TR valign="top">
<TD colspan="2" align="left">
<SPAN class="tabmenus"><?=$path;?></SPAN>
</TD>
</TR>
<TR>
<TD width="200px" nowrap>
<TABLE height="100%" width="100%" border="1">
<TR>
<TD height="20"><?=$rep->LienParent();?></TD>
</TR>
<TR>
<TD><I>Répertoires :</I><BR><BR><?=$rep->AfficheArborescence();?></TD>
</TR>
<TR>
<TD><I>Images : </I><BR><BR><?=$rep->ListeFichiers();?></TD>
</TR>
</TABLE>
</TD>
<TD valign="top">
<?PHP
if (isset($_GET['file']) AND is_file($_GET['file']))
{
print $dimensionOrigine.'<BR>';
?>
<IMG id="img" src="<?=$image?>" border="0" width="<?=$largeur?>" height="<?=$hauteur?>">
<?PHP
}
?>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Conclusion
Pour le moment, je pense qu'il n'y a pas de bug, mais je ne l'ai pas exploitée à fond.
Merci pour vos commentaires.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 01 avril 2006 10:27:30 :
- - Ajout d'une méthode de tri simple sur les sous-répertoires et les fichiers
- Ajout d'un méthode de définition de la constante ROOT en fonction de l'utilisateur connecté (id : Apache / Mandriva par htaccess)
- Intégration dans une archive ZIP contenant les 2 fichiers PHP et le fichier CSS
- 01 avril 2006 11:47:35 :
- - Ajout d'un test pour eviter le cross scripting sur le nom du fichier
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
arborescence de repertoire et sous répertoire avec galerie d'image [ par bladehelsing ]
Bonjours à tous,après avoir essayer tous les codes arborescence avec galerie d'image.j'en ai trouvé aucun qui:affiche d'abord les répertoires qui seul
creer un répertoire dans un répertoire [ par mouloudikhaled ]
Bonjour a tous, S'il vous plait. j'essaye de crée un dossier dans un dossier mais je n'y arrive pas. Pouvez vous me dire comment dois-je procédé ? Mer
Positionner ma galerie flash sur ma page [ par mel06 ]
Bonjour,Je possède une galerie flash sur mon site internet mais le problème c'est qu'elle se trouve en bas de la page : http://www.tristane-banon-offi
ouvrir une autre fenetre [ par hou1919 ]
SalutEst ce que vous pouvez m'aider à avoir une idée sur ce truc qui se trouve dans le lien <a href="http://www.wks.fr/Nouvel-article,158.html#"
Création site de vente [galerie Objet] [ par Brydjy ]
Bonjour à tous,Vraiment besoin d'aide...Je suis à l'école et j'ai pour projet de créer un site web.J'ai pas choisis le plus simple ! Site de vente...J
galerie photo mysql [ par nissweb ]
Bonjour j'ai besoin un code qui pemet d' ajouter et suprimer des photo à partir d'un formulaire qui contiens discription; style de photo et parcurir
Diaporama depuis une structure avec répêrtoire et sous-repertoire [ par patrick672 ]
Hello,A ce jour aucune connaissance php, je suis autodidacte et je me lance .J'ai créé pour un ami qui démarre son affaire, un site Web classique en h
Lister dans un tableau à 2 colonnes des dossiers et leurs contenus [ par jibtothenight ]
Bonjour,Avec mon php j'arrive à aficher le nom de mes dossiers et leurs contenus qui sont sur le serveur, voici mon code : <?phpfunction parcours_
Ouvrir un dossier répertoire du disque dur [ par sebalex ]
Bonjour à tous,Voilà. J'ai un form "fichier" sur une page relative à un client (id_client). Ce form sert à uploader un document PDF dans ma base. Ce
Comment lister le contenu d'un répertoire? [ par stankov ]
j'ai monté le site d'une église, site dans lequel se trouve un repertoire ARCHIVES. Pour lister le contenu de ce repertoire j'ai écris le script ci-de
|
Téléchargements
Logiciels à télécharger sur le même thème :
|