Rechercher : dans
Par :

Lister les fichiers d'un dossier en php

Dernière réponse le 8 déc 2008 à 12:55:54 Marc, le 26 nov 2003 à 13:56:15 
 Signaler ce message aux modérateurs

Bonjour a tous,
J'aimerai pouvoir créer un tableaux avec des noms de fichiers étant dans un dossier.
Par exemple, j'ai un dossier image et dedans j'ai
image1.jpg, image2.gif, image3.jpg etc...
et j'aimerai savoir si il est possible de créer un tableau ayant ces noms pour valeur?
Car j'ai fait deja qque recherche mais les méthodes ne recupèrent pas tout le temps les valeurs dans le meme ordre,
c'est a dire
une fois le tableau sera comme cela
image1.jpg
image2.gif
image3.jpg
mais une autre fois (comme il prend les fichiers au hasard) il sera
image2.gif
image3.jpg
image1.jpg

Mais moi j'aurai besoin de trouver une méhtode pour qu'il ait a chaque fois le meme odre..
est ce possible?

merci

Marc

1

Marc, le 26 nov 2003 à 15:05:12
  • +5

C'est bon j'ai trouvé.. la solution est:

$mydir = 'dossier/ou/sont/mes/images''; 
 if ($dir = @opendir($mydir)) 
 {
    while (($file = readdir($dir)) !== false) 
    {
      if($file != ".." && $file != ".")
       {
         $filelist[] = $file;
       }
    } 
closedir($dir);
 }
//Test a faire pour ne pas avoir d'erreur si il n'y a pas d'image dans le dossier
 if(sizeof($filelist) != '0') {
  sort($filelist);
 }



@ +

Répondre à Marc

2

s.spark, le 22 oct 2007 à 23:47:34
  • +3

Salut,

Sur ta 1er ligne c'est

$mydir = 'dossier/ou/sont/mes/images'; 


Et non :

$mydir = 'dossier/ou/sont/mes/images''; 

Répondre à s.spark

3

Ziltoid, le 23 oct 2007 à 13:31:24

Bonjour à tous.

J'ai un script qui permet de lister les fichiers d'un dossier (ici en l'occurrence le dossier "fichiers"). Ce qui est bizarre c'est qu'il fonctionne sur Internet mais pas en local.
En local il me retourne l'erreur suivante :

Catchable fatal error: Object of class Directory could not be converted to string in C:\wamp\www\test\index.php on line 19

A ce que j'ai lu c'est parce que je tente d'utiliser une variable en tant que chaîne de caractères, alors qu'à la base c'est un objet.
Mais à vrai dire je ne sais pas ce qu'il faut que je modifie concrètement pour remédier à ce problème.

Voici le code :

<?php

$d = dir("./fichiers");
while ($entry = $d->read())
{
if($entry != "." && $entry != ".."){
$lien = $d.' '.$entry;
$lien = str_replace('Object ', 'fichiers/', $lien);
    echo '<a href="'.$lien.'">'.$entry.'</a><br>';
	}
}

$d->close();
 ?>


La ligne 19 correspond à :
$lien = $d.' '.$entry;


Merci d'avance pour vos réponses.

Répondre à Ziltoid

4

Dalida, le 23 oct 2007 à 13:55:48
  • +4

Salut,

je ne l'utilise pas comme cela alors je te propose ce que j'utilise :

<?php
$dirname = '../fichiers/';
$dir = opendir($dirname); 

while($file = readdir($dir)) {
	if($file != '.' && $file != '..' && !is_dir($dirname.$file))
	{
		echo '<a href="'.$dirname.$file.'">'.$file.'</a>';
	}
}

closedir($dir);
 ?>

[ Mathieu ]
"Les jeunes c'est l'insécurité
il faudrait tous les enfermer!" BxN 1985

Répondre à Dalida

5

Ziltoid, le 23 oct 2007 à 14:13:12
  • +7

J'ai modifié quelques passages et c'est bon ça marche :

$dossier = './fichiers';
$d = dir($dossier);

while ($entry = $d->read())
{
if($entry != "." && $entry != ".."){
$lien = $dossier .' '.$entry;
$lien = str_replace('Object ', 'fichiers/', $lien);
echo '<a href="'.$lien.'">'.$entry.'</a><br>';
}
}
$d->close();

Merci quand même, ta solution est plus légère que la mienne. ;)

Répondre à Ziltoid

17

 skynof, le 8 déc 2008 à 12:55:54
  • +2

Si je me peux me permettre ton code est bon sauf que tu insères une petite erreur sur le lien :
$lien = $dossier .' '.$entry;

à la place c'est plutôt :

$lien = $dossier .$entry;

pour éviter un espace qui génère des erreurs de destination...
sinon ça marche niquel chrome :p

Répondre à skynof

6

dejant_9, le 11 mar 2008 à 23:13:58
  • +1

Bonjour a tous! j'ai un problème. j'ai un bout de code pour lire la première ligne d'un fichier texte et utiliser le mot qui s'y trouve pour créer une dossier à ce nom ( par ex le contenu de le première ligne de mon fichier est : tomas, je la récupère dans une variable , j'utilise cette variable pour créer un dossier thomas.) et ensuite je doit copier un fichier contenu dans un dossier /eleve (/eleve/enregistrements.txt) dans le dossier que je viens de créer. ma fonction copydir fonctionne bien généralement mais pas dans ce cas. il semblerais que $donnees (qui est la variable qui contiens le nom en première ligne, et que j'utilise pour créer le dossier) ne soit pas un argument valide pour le $destination de mon copydir..pourtant mon dossier est bien crée.c'est donc copydir qui ne fonctionne pas.toute idée sera la bienvenue..merci d'avance!

mon code:

<?php
$fp = fopen("/eleve/enregistrements.txt","r"); //on ouvre le fichier
$donnees = fgets($fp,10); //on récupère les 10 premiers caractères de la première ligne
fclose($fp); //on ferme le fichier

exec ("mkdir $donnees"); // on crée un dossier avec les valeurs extraites du fichier

$origine = "/eleve"; //on définit le dossier source de la copie
$destination = $donnees; //et sa destination
function copydir($origine , $destination) { //la fonction copie
$doss=opendir($origine);
$total = 0;
while ($fichier = readdir($doss)) { //on liste les fichiers du dossier
$l = array('.', '..');
if (!in_array( $fichier, $l)){
if (is_dir($origine."/".$fichier)){
$total += copydir("$origine/$fichier", "$destination/$fichier"); //on les déplace tous
} else {
copy("$origine/$fichier", "$destination/$fichier");
$total++;
}
}
}
return $total;
}
copydir ($origine , $destination) //on execute la fonction copie définie pas sa source et sa destination
?>

Répondre à dejant_9

7

dejant_9, le 11 mar 2008 à 23:17:38
  • +2

Juste une précision l'erreur est : Warning: copy(tomas /enregistrements.txt) [function.copy]: failed to open stream: Invalid argument in I:\htdocs\page5.php on line 176

la ligne 176 est : copy("$origine/$fichier", "$destination/$fichier");

Répondre à dejant_9

8

s.spark, le 11 mar 2008 à 23:34:24
  • +1

copy($origine.'/'. $fichier, $destination.'/'.$fichier);

Répondre à s.spark

9

dejant_9, le 11 mar 2008 à 23:44:21
  • +2

Merci ! malheureusement c'est toujours la même erreur ça ne change rien...je n'avais déja pas pu faire de mkdir sans passer par la commande exec. un mkdir ($donnees, 0777) me retournais une erreur (Warning: mkdir() [function.mkdir]: Invalid argument in I:\htdocs\page5.php on line 163) . Et bizarement exec ("mkdir $donnees"); fonctionne. c'est peut être le même genre de problème pour ma fonction copy?

Répondre à dejant_9

10

s.spark, le 11 mar 2008 à 23:49:44
  • +2

Faudrait être sur ce se que contiennent les variables et que les dossier et fichiers existent.

Répondre à s.spark

11

dejant_9, le 11 mar 2008 à 23:57:02
  • +2

Je fait tourner ca sur un serveur en local. j'ai crée le dossier d'origine et il contient un fichier texte qui est composé trois lignes. la première est le mot "tomas" et la fonction exec ("mkdir $donnees") me crée bien un dossier tomas à la racine du serveur mais il reste vide alors que le fichier texte devrais s'y copier. et la page affiche une erreur. l'erreur apparais dans la fonction copy alors que j'utilise la même variable que pour créer le dossier tomas. il semblerais que la variable $donnees ne peut pas être utilisée dans ce cas. mais je suis sur qu'elle contiens bien tomas et que mes fichiers et dossiers existent

Répondre à dejant_9

12

s.spark, le 12 mar 2008 à 00:03:07

Etre sur ça ne sert à rien, si tu par de se principe et que tu ne remets pas en cause ce que tu fais tu pourras resté bloquer sur des problèmes pendant très longtemps (et si $fichier ne contient rien ou un tableau ?).

Essais comme ça :

copy("$origine".'/'."$fichier", "$destination".'/'."$fichier");


ou comme ça :
@copy("$origine".'/'."$fichier", "$destination".'/'."$fichier");

Répondre à s.spark

13

dejant_9, le 12 mar 2008 à 00:24:11
  • +2

Idem pour la première solution. pour la deuxième (@copy) le message d'erreur disparais mais la copie ne s'effectue pas
à l'origine mon code pour créer le nouveau fichier étais if (!is_dir($destination)) mkdir($destination, fileperms($origine));
au lieu de exec ("mkdir $donnees")
mais j'obtenais
Warning: mkdir() [function.mkdir]: File exists in I:\htdocs\page5.php on line 169
alors que le dossier à créer n'existais pas et que la copie ne s'effectueais pas.

Répondre à dejant_9

14

s.spark, le 12 mar 2008 à 00:33:10
  • +1

Essais déjà quelque chose de plus basique.


copy("fichier.txt","dossier/fichier.txt.bak");


Après passe par des variables

$fichier='fichier.txt';
$dossier='dossier/';
copy($fichier,$dossier.$fichier);


Est-ce que le fichier page5.php est dans le dossier parent de du dossier "eleve" ??

Répondre à s.spark

15

dejant_9, le 12 mar 2008 à 00:53:52
  • +2

J'ai trouvé, tu avais raison pour le copy("$origine".'/'."$fichier", "$destination".'/'."$fichier");

et l'autre problème venais de mon $donnees = fgets($fp,10); en fait il lis tomas / et l'espace n'est pas admit pour le nom d'un fichier. j'ai réduit à 6 le nombre de caractères que j'utilise pour la création du dossier. pour les étudiants qui ont un nom plus long que 6 caractères il sera coupé lors de la création de leur dossier personel mais ce n'est pas un problème. merci beaucoup du coup de main! pour ceux que ca interessera peut être un jour (j'ai avancé en utilisant ce genre de posts..):


le code fonctionnel:
<?php
$fp = fopen("/eleve/enregistrements.txt","r"); //on ouvre le fichier
$donnees = fgets($fp,6); //on récupère les 10 premiers caractères de la première ligne
fclose($fp); //on ferme le fichier

exec ("mkdir $donnees"); // on crée un dossier avec les valeurs extraites du fichier

$origine = "/eleve"; //on définit le dossier source de la copie
$destination = $donnees; //et sa destination
function copydir($origine , $destination) { //la fonction copie
$doss=opendir($origine);
$total = 0;
while ($fichier = readdir($doss)) { //on liste les fichiers du dossier
$l = array('.', '..');
if (!in_array( $fichier, $l)){
if (is_dir($origine."/".$fichier)){
$total += copydir("$origine/$fichier", "$destination/$fichier"); //on les déplace tous
} else {
copy("$origine".'/'."$fichier", "$destination".'/'."$fichier");
$total++;
}
}
}
return $total;
}
copydir ($origine , $destination) //on execute la fonction copie définie pas sa source et sa destination
?>

Répondre à dejant_9

16

s.spark, le 12 mar 2008 à 01:20:32
  • +1

Tu peux aussi remplacer les espaces pas un underscore


$texte = strtr($texte , " ", "_");

Répondre à s.spark
Collection CommentÇaMarche.net