Explorateur ftp sur 2 niveaux

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 615 fois - Téléchargée 17 fois

Contenu du snippet

Une petit source qui peut aider certains à comprendre l'utilisation des dossiers.

Moi-même je viens de commencer ce soir et voilà mon petit entraînement. =P

Cette source permet de lister les fichiers et dossiers sur plusieurs niveaux (au moins 2) et de pouvoir fournir un aperçu des fichiers (visualisation de l'image et/ou lien vers le fichier).

Aperçu ici: http://www.g-web.fr.nf/upload/membre/

Source / Exemple :


<?php
	/*
	G FTP
	Par viki53 (http://viki53.g-web.fr.nf/)
	Source libre d'utilisation
	
	Un petit lien serait tout de mêmele bienvenu =D 
	
	Les variables $config['site_url'] et $config['site_racine'] sont à déclarer et correspondent respectivement à l'URL absolue du site (http://www.g-web.fr.nf/) et le chemin depuis la racine du serveur (/localhost/site/).

  • /
$nb_fichiers = 0; // On initialise les compteurs $nb_dossiers = 0; $file_types_img = array('jpg','gif','png','bmp','jpeg', 'tif'); // On déclare quelques types de fichiers (ici les images) $file_types_zip = array('zip','rar'); // Idem mais pour les archives if( $_GET['folder'] != NULL ) { $folder = htmlentities($_GET['folder']); } if( $_GET['subdir'] != NULL ) { $subdir = htmlentities($_GET['subdir']); } if( $_GET['file'] != NULL ) { $file = htmlentities($_GET['file']); $filename = explode('.', $file); $filenameext = strtolower($filename[count($filename)-1]); // On récupère l'extension du fichier if($folder != NULL) $doss = $folder.'/'; if($subdir != NULL) $doss = $doss.$subdir.'/'; if( is_file($doss.$file) ) { if( in_array($filenameext, $file_types_img) ) // Si le fichier est une image { echo ' <p class="t_align_centre"> <a href="'.$doss.$file.'" title="Voir l\'image en grand"><img src="'.$doss.$file.'" alt="'.$file.'" class="avatar" /></a> </p> '; } elseif( in_array($filenameext, $file_types_zip) ) // Si c'est une archive { echo ' <p class="t_align_centre"> Télécharger l\'archive : <a href="'.$doss.$file.'"><img src="/img/icones/cursor.png" alt="Clic" /></a> </p> '; } else // Sinon { echo ' <p class="t_align_centre"> Extension inconnue ('.strtoupper($filenameext).') : <a href="'.$doss.$file.'"><img src="/img/icones/cursor.png" alt="Clic" title="Télécharger le fichier" /></a> </p> '; } echo ' <p class="t_align_centre"> <a href="'.$_SERVER['HTTP_REFERER'].'"> <img src="/img/precedent.png" alt="Retour" /> </a> <a href="?"> <img src="/img/sommaire.png" alt="Sommaire" /> </a> <a href="'.$_SERVER['HTTP_REFERER'].'"> <img src="/img/suivant.png" alt="Suite" /> </a> </p> '; // Quelques petits liens. :p } else // Si le fichier n'existe pas { echo '<p class="message_erreur">Ce fichier n\'existe pas.</p> <p class="message_info">Vous aviez demandé <a href="?folder='.$folder.'" class="color_bleugris">'.$config['site_url'].'upload/membre/'.$doss.$file.'</a></p>'; } } else // Si $_GET['file'] n'est pas donné { // Si on veut parcourir le serveur echo '<p>Dossier recherché : <span class="color_bleugris">'.$config['site_url'].'upload/membre/'; if($folder != NULL) echo $folder.'/'; if($subdir != NULL) echo $subdir.'/'; echo'</span>.</p>'; if($folder != NULL) $doss = $folder.'/'; if($subdir != NULL) $doss = $doss.$subdir.'/'; if( is_dir($config['site_racine'].'upload/membre/'.$doss) ) // Si le dossier existe { $dossier = opendir($config['site_racine'].'upload/membre/'.$doss); echo ' <ul> '; while( ($fichier = readdir($dossier)) != FALSE ) { if( is_file($doss.$fichier) AND !is_dir($doss.$fichier) AND $fichier != 'index.php' ) { $nb_fichiers ++; //On incrémente le compteur de un $fichier_name = explode('.', $fichier); $fichier_ext = strtolower($fichier_name[count($fichier_name)-1]); echo ' <li>'; if( in_array($fichier_ext, $file_types_img) ) // Si c'est une image { echo '<img src="/img/icones/image.gif" alt="" />'; } elseif( in_array($fichier_ext, $file_types_zip) ) // Si c'est une archive { echo '<img src="/img/icones/compress.png" alt="" />'; } else // Sinon { echo '<img src="/img/icones/cursor.png" alt="" />'; } // Le lien, qui varie selon les données existantes if( $subdir != NULL ) { echo' <a href="?folder='.$folder.'&amp;subdir='.$subdir.'&amp;file='.$fichier.'"> /'.$fichier.' </a> '; } elseif( $folder != NULL ) { echo' <a href="?folder='.$folder.'&amp;file='.$fichier.'"> /'.$fichier.' </a> '; } else { echo' <a href="?file='.$fichier.'"> /'.$fichier.' </a> '; } echo ' </li>'; } elseif( is_dir($doss.$fichier) AND !is_file($doss.$fichier) AND $fichier == '..' ) { // Si c'est un dossier supérieur if($folder != NULL AND $subdir != NULL ) { echo ' <li> <a href="?folder='.$folder.'"> <img src="/img/precedent.png" alt="<=" /> </a> </li> '; } elseif($folder != NULL AND $subdir == NULL ) { echo ' <li> <a href="?"> <img src="/img/precedent.png" alt="<=" /> </a> </li> '; } } elseif( is_dir($doss.$fichier) AND !is_file($doss.$fichier) AND $fichier != '.' ) { // Si c'est un sous-dossier $nb_dossiers ++; // On incrémente le beau compteur // Un petit lien if( $folder != NULL ) { echo ' <li> <a href="?folder='.$folder.'&amp;subdir='.$fichier.'"> <img src="/img/icones/folder.gif" alt="=>" /> /'.$fichier.'/ </a> </li> '; } else { echo ' <li> <a href="?folder='.$fichier.'"> <img src="/img/icones/folder.gif" alt="=>" /> /'.$fichier.'/ </a> </li> '; } } } echo ' </ul> '; // On affiche les compteurs echo ' <p class="message_info">Il y a <strong>'.$nb_fichiers.'</strong> fichier(s) et <strong>'.$nb_dossiers.'</strong> sous-dossier(s) dans ce dossier.</p> '; closedir($dossier); // On ferme le dossier } else // Si le dossier demandé n'existe pas { echo '<p class="message_erreur">Le dossier n\'a pas pu être ouvert.</p>'; } } ?>

Conclusion :


Je ne l'ai pas vraiment développée mais j'ai ajouté quelques commentaires pour vous aider.

Je précise que je n'ai pas effectué les changements pour qu'elle soit adaptable à tous les sites.

Bientôt je la transformerai en fonction. ;)

A voir également

Ajouter un commentaire

Commentaires

PHPLizardo
Messages postés
6
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
29 août 2008

Je me permet d'ajouter que cette source n'est absolument pas sécurisée car elle permet à qui le souhaite de connaitre l'arborescence complète du ftp.

Voyez vous-même: http://www.g-web.fr.nf/upload/membre/?folder=../../
cs_yoman64
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

Super ! nouveau boulot + beaucoup de codage PHP dans mes temps libre pour mon hébergement = pas beaucoup de temps pour CS.

Et toi comment va, quand j'ai arrêté de venir sur phpcs tu n'étais pas bien présent non plus, occupé ?

Je suppose que tu as raison, peut être qu'en message privé ça serait un meilleur endroit ;p.
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Oh Yoman ! Comment ça va depuis le temps ? Comment vont les affaires ?

Ouais, je sais, c'est pas trop l'endroit pour ce genre de comm... navré.
cs_yoman64
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

Salut,

Je passais par là et j'ai juste un petit commentaire: comme neigedhiver le disait, tu devrais vraiment changer le titre, en plus d'être inexacte, il complique la recherche à ceux qui cherchent un VRAI explorateur FTP :-/
viki53
Messages postés
31
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
11 septembre 2008

D'accord, je ne l'avais pas pris exactement comme ça. :p

Donc:
- Des sources de listage de dossiers, j'en ai vue pas mal sur PHPCS ou autre, mais aucune ne correspondait et peu géraient les sous-dossiers et l'affichage des fichiers (images).
- Je vais me pencher sur les classes, c'est vrai que je ne peux qu'y gagner. ^^
- Pour PHP 5, je vais voir si je l'ai sur mon serveur. ;)
- Et je n'attends pas de félicitations, juste que cette source peut aider certains débutants (comme moi ou pire) à comprendre comment utiliser certaines fonctions.

Je vais me pencher sur ta source et voir ce que je peux en retirer. ;)

Je te souhaite aussi une bonne fin de journée et de sortir des sources intéressantes. =D
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (viki53)