Posez votre question Signaler

Afficher le contenu d'un repertoire en PHP [Résolu]

Fayçal - Dernière réponse le 1 avril 2015 à 18:57
je veux afficher une liste des fichiers d'un repertoires en utilisant PHP, par exemple, sur mon site , j'ai un repertoire mp3 qui contient des mp3, je veux qu'une page "list.php" affiche le contenu de ce repertoire, merçi

si vous avez un autre astuce plus simple ça serait mieux, merçi
Lire la suite 
Réponse
+120
moins plus
tiens, regarde si ca te conviens, j'ai fait ca y'a quelques semaines sur ccm, je retrouve plus la version in line... mais tu auras pas de difficultés à le tester et a le mettre à ta guise :

<?php
$dir_nom = '.'; // dossier listé (pour lister le répertoir 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 "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\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 "Liste des fichiers/documents accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\n";
		foreach($fichier as $lien) {
			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>";
 }
?>
antoine- 13 août 2014 à 17:48
Punaise, ça marche super bien bien même sans modifier quoi que ce soit, bravo !
Répondre
Trolololol- 29 sept. 2014 à 11:16
merci bien, pas besoin de ce casser la tête à trouver les fonctions ;)
Répondre
Karim- 3 janv. 2015 à 12:14
Oui, mais la fonction sort() ne trie pas par date de modification (Elle est équivalente à ls -l en Linux)
Pour moi les résultats sont:
Sauvegardes BDD
* Version du 01-01-2015 à 11:00
* Version du 01-01-2015 à 09:00
* Version du 02-01-2015 à 11:00
* Version du 03-01-2015 à 11:00
* Version du 23-12-2014 à 11:00
* Version du 24-12-2014 à 11:00
* Version du 25-12-2014 à 11:00
* Version du 26-12-2014 à 11:00
* Version du 27-12-2014 à 11:00
Ce que je veux est un tri équivalent à la commande ls -lRt sous Linux, qui peut donner ça:
Sauvegardes BDD
* Version du 03-01-2015 à 11:00
* Version du 02-01-2015 à 11:00
* Version du 01-01-2015 à 11:00
* Version du 01-01-2015 à 09:00
* Version du 27-12-2014 à 11:00
* Version du 26-12-2014 à 11:00
* Version du 25-12-2014 à 11:00
* Version du 24-12-2014 à 11:00
* Version du 23-12-2014 à 11:00
Merci
Répondre
Anonyme- 27 mars 2015 à 22:37
Pour un tri par date de modification du fichier tu peux éventuellement créer un array avec en clé la date de modification au format mysql (aaaa.mm.jj) :
$maliste = array('madatemysql' => 'monfichier');

Une autre solution plus simple consiste à sauvegarder tes fichiers directement avec le nom correctement formaté : aaaa.mm.jj_sauvegarde.sql
Répondre
Karim- 1 avril 2015 à 18:57
Très bien jouer,
Je n'ai pas penser de nommer avec cette manière.
Comme je trie sera par nom.
Merci
Répondre
Ajouter un commentaire
Réponse
+11
moins plus
teste ce bout de code

<?php
$dir = opendir("le_chemin_vers_ton_repertoire");
while($file = readdir($dir)) {
echo "$file\n";
}
closedir($dir);
?>
------------------------------------------------
(HMS) la réussite ne s'improvise pas!!!
damien- 30 juil. 2007 à 15:10
bonjour, je viens d'utiliser ce bout de code sur un des mes sites et çà fonctionne bien mais je rencontre un pb pour l'affichage du résultats:

je voudrais savoir comment faire pour que les noms de fichiers apparaissent en colonne plutôt que les un à la suite des autres à l'horizontale.

avez vous une idée ?

merci d'avance
Répondre
bbk- 29 juin 2010 à 00:58
(pour ceux qui cherche : )
faut ajouter un <br /> de sorte à faire :

<?php
$dir = opendir("le_chemin_vers_ton_repertoire");
while($file = readdir($dir)) {
echo "$file <br />\n"; /* le <br /> donne un retour à ligne pour le html; et le \n donne une retour à la ligne dans le code source */
}
closedir($dir);
?>
une autre option est possible :
<?php
$dir = opendir("le_chemin_vers_ton_repertoire");
echo "<pre>";
while($file = readdir($dir)) {
echo "$file\n";
}
echo "</pre>"; /* les balises <pre></pre> utilise la mise en forme du code source, le \n sert donc de <br /> sur la page html */
closedir($dir);
?>
Répondre
Sizer- 13 sept. 2012 à 16:06
C'est le plus efficace !!! =)
Répondre
lWoodie / Who0H4len- 26 août 2013 à 22:33
Si vous voulez le tout avec le code qui affiche les images :

<?php
$dir = opendir("uploads/");
while($file = readdir($dir)) {
echo "$file <br />\n"; /* le <br /> donne un retour à ligne pour le html; et le \n donne une retour à la ligne dans le code source */
?>
<img src="uploads/<?php echo $file; ?>"/>
<?php
}
closedir($dir);
?>
Répondre
Ajouter un commentaire
Réponse
+4
moins plus
Bonjour
je desirerais ouvrir un repertoire crée, dans une fenetre prevu a cette effet. Le probleme etant ke c tout le site qui s'affiche dans le fenetre sur internet explorer en revanche cela fonctionne tres bien sur mozilla.Pkoi et que puis je faire?


// Le répertoire a été choisi
if ( isset($_POST['gal']) )
{
if ( strtoupper($_POST['gal']) == "new" )
{
if ( isset($_POST['repertoire']) )
{
if(is_dir($relative_files_path . $_POST['repertoire']))
{
echo "<form name=\"repertoire\" method=\"post\" action=\"upload.php?gal=new\">";
echo "Ce répertoire existe déjà.<br>Merci de choisir un nouveau nom de répertoire : <br>";
echo "<input type=\"text\" name=\"repertoire\">   <input type=\"submit\" name=\"submit\" value=\"Valider\">";
echo "<input type=\"hidden\" name=\"reponse_OK\">";
echo "</form>";

echo "<form name=\"repertoire\" method=\"post\" action=\"upload.php\">";
echo "<input type=\"hidden\" name=\"reponse_OK\">";
list_dir_to_upload($relative_files_path, "répertoires");
echo "<input type=\"submit\" name=\"submit\" value=\"Valider\">";
echo "</form>";
}
else
{
mkdir($relative_files_path . supprimer_accents($_POST['repertoire']));
afficher_upload($_POST['repertoire']);
}
}
}
else
{
afficher_upload($_POST['gal']);
}
}
// Choix du répertoire
else
{
echo "Choisissez le répertoire dans lequel vous voulez déposer vos photos, ou créez un nouveau répertoire à votre nom :<br><br>";
echo "<form name=\"repertoire\" method=\"post\" action=\"upload.php\">";
echo "<input type=\"hidden\" name=\"reponse_OK\">";
echo "<input type='hidden' name='gal' value='new'>";
echo "Nouveau répertoire : <input type=\"hidden\" name=\"reponse_OK\">";
echo "<input type=\"text\" name=\"repertoire\"> <input type=\"submit\" name=\"submit\" value=\"Créer un nouveau répertoire\">";
echo "</form>";

echo "<form name=\"repertoire\" method=\"post\" action=\"upload.php\">";
echo "<input type=\"hidden\" name=\"reponse_OK\">";
list_dir_to_upload($relative_files_path, "répertoires");
echo "<input type=\"submit\" name=\"submit\" value=\"Valider\">";
echo "</form>";
}
}
Ajouter un commentaire
Réponse
+1
moins plus
Salut,
J'ai récuperer le script de gryzzly qui marche à merveille.
Mais voila, je voudrais ajouter une petite modif. Je voudrais qu'au lieu d'ouvrir le fichier en cliquant dessus, je voudrais que ça le supprime.
Pour cela j'ai modifier une ligne :

echo "\t\t\t<li><a href=\"<? unlink($dir_nom/$lien); ?> \">$lien</a></li>\n";

Mais, il me repond : You don't have permission to access /monsite/Admin/< on this server.

Ou est mon erreur ?
y'a t'il une autre solution ?

Merci
mike- 21 sept. 2010 à 04:01
CHMOD ... tu n'as pas les autorisations sur le serveur
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
Salut a tous,
Alors ma question est la suivante que doit-on mettre pour afficher un listing d'un dossier mais comprenant qu'un type de fichier dans mon cas des fichiers .HTML
En faite je voudrais afficher un listing mais que de fichiers html et non pas des autres fichiers présent sur ce même dossier.
Merci de votre réponse
Cordialement
Ajouter un commentaire
Réponse
+1
moins plus
bah...il faudrait peut-être que tu l'upload sur un serveur ou que tu utilise un serveur local ! windows (ou tout autre système d'exploitation je pense) ne lit pas le PHP !
si tu n'as pas de compte ftp, je te conseil de télécharger WAMP manager ( je l'utilise et il fonctionne parfaitement).
il permet de lire les PHP en étant hors-ligne. sinon, inscrit-toi sur un site qui propose un hébergement(ifrance et lycos multimania sont gratuit).
Ajouter un commentaire
Réponse
+1
moins plus
ok merci de ta reponce!
Ajouter un commentaire
Réponse
+1
moins plus
bonjour,
je vous conseille absolument jbcexplorer (http://www.jbc-explorer.info/)
qui liste n'importe qu'elle fichier contenu dans les repertoires et cela trés simplement
a+
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

j'aimerais savoir comment on peut afficher le contenu d'un repertoire perso d'un membres

je m'explique un membre veut uploader un fichier à partir de son profil, une fois uploader cela créer un repertoire perso ok ca marche mais ce que je voudrais faire c'est que lorsque le membres veut creer un posts ou répondre à un post et celui-ci veut introduire un de ces fichiers uploader ceux-ci apparaisse automatiquement en bas de chaque nouveaux posts qu'il veut créer avec à côté du fichier une case à cocher qui enverrait du bbcode dans la zone de texte quand le fichier est séléctionner et donc quand le memebres fait envoyer le message le fichier s'introduit avec le message.
mais les fichiers faudrait qu'ils apparaissent seulement aux membres concerné par son repertoire et seulement si celui ci est connecté avec son identifiant
je ne sais pas si je me suis fait comprendre excusez moi c'est un peu long mais merci d'avance

A+
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour ce script Gryzzly .
J'aimerai savoir comment ajouter à la fin des lignes du listing, la taille des fichiers .
Et si possible, en debut des lignes, une icone par extension .

Mon but etant de refaire un peu ce que l'on voit sur une page ftp que je ne peux utiliser car il y a parfois plusieurs dossiers à ouvrir pour un seul client (membre) .

Merci par avance
lWoodie / Who0H4len- 26 août 2013 à 22:34
<?php
$dir = opendir("uploads/");
while($file = readdir($dir)) {
echo "$file <br />\n"; /* le <br /> donne un retour à ligne pour le html; et le \n donne une retour à la ligne dans le code source */
?>
<img src="uploads/<?php echo $file; ?>"/>
<?php
}
closedir($dir);
?>

Dans user et tu connecte ta DB ou ton fichier
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
derien :p
Ajouter un commentaire
Réponse
+0
moins plus
super merci gryzzly je cherche depuis quelque jour quelques chose pour faire sa et c'est exactement ce qu'il me falais trop bon ^^
perplexe- 3 nov. 2008 à 18:22
et voilà de quoi répondre à toute vos questions!
Le poste est vieux, mais le lien vaut le coup!!
http://cyberzoide.developpez.com/php4/file/
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
comment afficher l'arborescence d'un site web.
Ajouter un commentaire
Réponse
+0
moins plus
Comment faire pour empecher de lister (par exemple) le fichier index.php ...

Eneffet, c'est bien joli de l'afficher et de le rendre clickable mais dans moncas,je suisdéjàsur l'index, je ne vais donc pas y retourner ;)

Merci de vos avis
Ajouter un commentaire
Réponse
+0
moins plus
Tu fais une simple condition dans la boucle while qui parcoure le dossier :

if ( $file != 'index.php' )
{
...
}
Eclipse- 3 nov. 2009 à 14:57
Tien j'ai fais ça finalement :p

// NE PAS AFFICHER DE INDEX.PHP = exclusion de fichiers.

if($lien == "index.php"){} else {

echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";


} //fin du test exclusion
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

j'ai repris à mon compte le script de Grizzly ci-dessus, mais je n'obtiens pas le fonctionnement souhaité.

Je désire scruter un répertoire partagé sur un poste de mon réseau ($dir_nom = chemin UNC de mon répertoire) , afficher le résultat dans une page web (jusque là le script fonctionne parfaitement) et télécharger les fichiers. Mais là, cela ne fonctionne pas.

En fait, il cherche à ouvrir http://chemin UNC de mon partage. Y a t'il une autre façon de faire.

Mon but est de construire un portail d'entreprise de partage de document.
Ajouter un commentaire
Réponse
+0
moins plus
Ajouter un commentaire
Réponse
+0
moins plus
Le plus simple c'est d'utiliser la fonction glob() :

<?php
$liste = glob('/mon/dossier/*.mp3');
foreach ($liste as $nom_fichier) {
    echo $nom_fichier."\n";
}
?>

Sinon il faut utiliser une fonction récursive, tout est expliqué dans ce tutoriel :
http://www.finalclap.com/faq/197-php-liste-fichier-dossier-recursif
Ajouter un commentaire
Réponse
+0
moins plus
salut, ton code marche nikel pour afficher les dossier. J'aurai juste une petite question.

J'arrive a afficher comme ci-dessous mes dossiers :

Liste des dossiers accessibles dans 'images' :
annee_2004
annee_2005
annee_2006
annee_2007
annee_2008
annee_2011
annee_2012
annee_2013

Retour

Maintenant je cherche juste a pouvoir rentrer dans un dossier et supprimer un fichier sélectionné.

ex : annee_2004 -> image1.jpg (supprimer l'image1)

Merci par avance de votre aide.
Ajouter un commentaire
Réponse
-1
moins plus
voilà la solution

http://fr.php.net/manual/fr/function.readdir.php
Ajouter un commentaire
Ce document intitulé «  afficher le contenu d'un repertoire en PHP  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

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.

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