COMPTER LE NOMBRE DE FICHIERS DANS UN DOSSIER

mehdi7604 Messages postés 118 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 6 mars 2015 - 31 mars 2008 à 01:27
 juju - 24 nov. 2016 à 16:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46234-compter-le-nombre-de-fichiers-dans-un-dossier

C'est parfait merci
merci bien, ça marche très bien (y)
Ce code fonctionne très bien.
Super merci.
C'est exactement ce que je cherchais.
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
30 août 2011 à 01:09
Salut nossoctoruss,

Réponse tardive mais je pense pouvoir t'aider si tu n'as pas résolu ton souci.

$files = glob("TON_CHEMIN/*.php*");/* $files pour "lister" les fichiers - Mise en place de *.* pour dire que ce dossier contient une extension (par exemple .jpg, .php, etc... */
$compteur = count($files);/* Variable $compteur pour compter (count) les fichiers lister ($files) dans le dossier */
echo "($compteur";
if ($compteur > 1) { echo " fichiers)"; }
else { echo " fichier)"; }
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
8 juin 2011 à 15:21
un espace membre sans BDD: c'est comme parler d'une fille sans seins ni fesses
cs_nossoctoruss Messages postés 126 Date d'inscription samedi 28 novembre 2009 Statut Membre Dernière intervention 9 juin 2013
1 mai 2011 à 15:25
bonjour,je sais,je deterre,mais j'ai un petit souci au niveau de ton code MJ92 , je suis debutant,et en ce moment , je crée un espace membre sans bdd, je suis débutant, je n'ai jamais lus ni pris de cours php (mais le fait est que je suis a 75% de cet espace membre ^^,et qu'il fonctionne) bref mon probleme est que ton code:
<?php
/* On récupère les fichiers du répertoire dans un tableau $fichiers */
$dir = opendir(".");
$fichiers = array();
while ($nom = readdir($dir)) {
$fichiers[] = $nom;
echo $nom.'
';
}
closedir($dir);
?>

affiche les fichiers et les dossires, et moi je veux afficher que les fichiers .php et cacher l'extention .php,pour ce qui est de cacher l'extention, c'est fait:
<?
$dir = opendir("members/");
$fichiers = array();
while ($nom = readdir($dir)) {
$fichiers[] = $nom;
$ext = $nom;
$ext = str_replace('.php' ,'' ,$ext);
echo "".$ext."
";
}
closedir($dir);
?>
mais appres,pour trier,j'ai essayé:
<?
$dir = opendir("members/*.php*");
$fichiers = array();
while ($nom = readdir($dir)) {
$fichiers[] = $nom;
$ext = $nom;
$ext = str_replace('.php' ,'' ,$ext);
echo "".$ext."
";
}
closedir($dir);
?>
mais ca ne marche pas...quelqu'un peut-il m'aider svp?
babatt92 Messages postés 33 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 10 juillet 2010
20 juil. 2008 à 23:50
Bonjour
Mon script si dessous marchait parfaitement sous easyphp mais pas du tout chez free. Apparement ils ont désastivé la fonction glob. Je n'arrive pas pas du tout avec opendir()

<? $files = glob("../../absolut/Images/500500/".$val['Reference']."*.jpg");
$compteur = count($files);
echo "Il y a $compteur photo";
If ($compteur > 1) { echo "s"; }
echo " en cliquant l'agrandissement. ?>
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 20:05
Salut,

Elle est arrivé sur Codyx ce jour =)
Oui, bien sur, c'est plus simple, je n'ai pas appris à coder en fonction, mais j'apprends, on peut l'enlever =)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 mars 2008 à 20:03
Et ce, sans compter l'exemple dans la manière de coder que l'on montre à un débutant...le tout séquentiel, c'est pas ce qu'il y a de mieux. Autant donner de bonnes habitudes afin qu'il galère moins par la suite avec ses propres codes.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 mars 2008 à 20:01
Hello,

j'irai jeter un oeil sur codyx. Parce que je suis tout à fait d'accord avec Neige : ça n'est pas un code source, c'est bien un snippet.
De plus, il y a un truc que j'ai du mal à comprendre décidément : pourquoi les codes dédiés aux débutants sont-ils toujours les moins pratiques à utiliser ? Quand on est débutant, à priori, c'est qu'on aura plus de mal à modifier un code pour l'intégrer à SON site qu'un non débutant. Et quoi de plus simple à utiliser qu'une fonction ? J'ai besoin de savoir combien de fichiers contient un répertoire, j'appelle la fonction compterFichiers() en lui passant le répertoire concerné, et je sais qu'elle me retourne un entier. Après, si je veux faire un echo ou autre, c'est facile.
Imaginez si les créateurs de PHP avaient fait toutes les fonctions de cette manière :
- compter le nombre de caractères dans une chaîne.
Reproduisez et adaptez ce code :
<?php
$i = 0;
$sChaine = 'toto';
while(isset($sChaine[$i])) {
$i++;
}
echo 'Il y a '.$i.' caractère dans la chaîne '. $sChaine;
?>

Franchement, pour un débutant, c'est pas plus simple et adaptable de faire par exemple:
<?php
echo 'Le mot toto contient '.strlen('toto').' caractères';
?>

?
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 03:04
Hum intéressant (mon message n'a pas été posté donc s'il est en double, désolé)...
Je ne connais pas tout encore, j'apprends via des tutos, des sources.
Pour ce code, je me suis lancé sur cela, mais bon, sans réel succès, puis ce code que je viens de faire, m'a permis de savoir le nombre de fichier qu'il y a dans mon panneau d'administration par admins...

Merci en tout cas pour l'info =)
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 03:01
Hum ok, intéressant, j'apprends PHP de façon, comment dire ça, vite, pour reprise d'études, donc je n'ai pas tout encore. Disons que je visionne pas mal de sources, j'apprends de là, de tutos, mais je n'ai pas toutes les bases, et ce code là m'a intéressé quand je l'ai fait pour un panneau d'administration...

En tout cas, merci pour l'info
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 mars 2008 à 02:55
Content de voir que tu ne prends pas mal mes remarques : tant mieux, parce que je les fais sans aucune animosité.

Le code que j'ai mis au dessus est effectivement pour débutant. Pas un débutant qui découvre PHP depuis 1h, certes, mais quand même. Cependant, il fait appel à des notions de non-débutant (test de l'existence du répertoire, gestion de l'erreur).

Il s'agit donc d'une fonction qui retourne un nombre en cas de réussite (et c'est là que je me rends compte qu'elle ne renvoit rien en cas d'échec, ce qui est une erreur de ma part).
Elle teste tout d'abord l'existence du répertoire en tant que répertoire (d'où l'utilisation de is_dir() au lieu de file_exists() : puisque les répertoires sont aussi des fichiers, file_exists() retourne vrai si un fichier du nom existe, que ce soit un simple fichier ou un répertoire).
Elle compte ensuite le nombre de fichiers dans le répertoire, déduis . et ..
Si le répertoire n'existe pas, elle provoque une erreur avec un message (en anglais, qui peut être traduit par un gestionnaire d'erreurs plus tard), et avec un code erreur E_USER_NOTICE (cf la doc de PHP pour ça).

RIen de bien sorcier. Pour que ça soit plus propre, il faudrait rajouter
return false;
après le trigger_error().

Euh voilà.
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 02:39
Pardon, que j'avais fait un lien sur mon forum pour codyx.
PS : Désolé pour les fautes, en me relisant, j'ai vu le torchon.

Néanmoins, merci pour la franchise =)
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 02:36
C'est sur, on va pas se battre pour ça.
En revanche, je ne sais pas si ton code ci-dessus est pour débutant, perso, je le comprends qu'à moitié, mais je ne suis pas un expert non plus, loin de là, je tiens à le précisé.

Ayant vu ce type de code qui ne fonctionnait pas, je me suis dit autant le faire ici, j'ai combiné plusieurs codes, en vain.

J'ai posté ce code ici, en oubliant que codyx existait (pas cool, je sais), habitude de poster sur mon forum (pour cela que je dis que des snippets et codes j'en ai), j'ai vu que j'avais fait un lien sur codyx, et j'ai donc ajouté ce code dans les snippets.

S'il n'a vraiment pas sa place ici (chose qui est plus que probable), je n'ai rien contre qu'il soit supprimé d'ici pour le laisser sur codyx. Mais ca venait d'une bonne intention et par simple oubli de ma part pour codyx (posté dessus qu'après...).
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 mars 2008 à 02:27
Alors je ne crache mon venin sur personne. Je ne sais même pas si j'en ai (réflexion faite, si, mais je le garde pour les grande occasions).

C'est bien de partager. C'est très bien. Je t'en félicite, c'est une bonne initiative.
Simplement, c'est pas parce que je ne suis pas admin que j'ai pas mon mot à dire quant à l'endroit où poster un snippet. Je te fais simplement remarquer qu'à mon sens ce snippet a sa place dans les snippets, pas dans les sources. Rien de plus. Je laisse les admins faire leur boulot, moi, en tant qu'habitué, je te dis simplement ce que je pense. Le fait que je sois un habitué ne me donne pas de pouvoir, pas de supériorité, je ne te juge pas, je ne te prends pas de haut.
Et je ne dis pas que ton snippet n'aide pas, je ne remets pas ça en question, donc pas la peine de te "défendre" en disant que c'est pour aider.

D'ailleurs, j'ai pas dit que ta source était inutile. Première chose que j'ai faite quand je l'ai vue, c'est chercher si une fonction php fait ça (parce que crois-moi, des snippets ou des sources qui font en 15 lignes ce qu'une fonction fait en natif, ça existe, et on en voit...). Pas de fonction qui existe, très bien. J'ai alors cherché comment faire plus court. On peut le faire en une ligne, je te l'ai proposé. Voilà pour la "critique" du code. Tu prends, tu laisses, peu importe. C'est pas bien important, parce que côté performances ma ligne ne fait sûrement pas beaucoup mieux que les tiennes. C'est juste plus court...

Donc oui, c'est utile, ça peut aider : ça n'a juste pas sa place dans les sources... Je me permets de te le dire, parce que si cette source disparait, tu sauras pourquoi (surtout si le snippet est publié).

Pour terminer ma critique du code : l'idéal est non pas de faire un bout de code qui formatte un affichage en HTML, mais qui se contente de retourner une valeur (ici, le nombre de fichiers). L'idée est que c'est à chacun de choisir comment il présente ses données. Oui, chacun peut modifier les 3 lignes qu'il y a, c'est pas sorcier. C'est juste pour pinailler, parce que c'est très important à mes yeux, et ça joue sur les habitudes de développement : séparer le traitement (ici le PHP) de l'affichage (ici, du HTML).
Tu en ferais une fonction comme ça :

function num_files($dir) {
if (is_dir($dir)) {
return (count(scandir($dir) -2);
}
else {
trigger_error('Directory does not exist', E_USER_NOTICE);
}
}

ce serait encore plus propre...

Et puis des snippets, si t'en as plein, n'hésite pas à les poster... Ca prend parfois un peu de temps à la validation, mais c'est vraiment le genre de contribution qui ne peut être que bénéfique.
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 02:00
Lol neigedhiver...
Ne crache pas ton venin sur moi, il y en a plein d'autres qui ont fait cette chose et je ne t'ai pas vu faire ça.
Soit, on parle de code, c'est pour aider, donc aider ne veut pas dire "je te lynche sur autre chose".
Les admins ont le pouvoirs de faire ce qu'ils veulent dessus, donc on reste sur la partie source (ou code si tu préfères), pas sur la partie "je ne suis pas d'accord avec toi pour l'emplacement". (Et je ne suis pas pressé, car j'aurai pu en poster des sources et/ou snippets, mais cela est utile pour ceux qui cherche, comme moi, et qui n'avaient pas trouvé =)).

Darkangel75, ben j'espère que ça t'a aidé ;) et merci pour le com's =)
cs_DarkAngel75 Messages postés 6 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 31 mars 2008
31 mars 2008 à 01:54
oui moi en tout cas ca me sert.
c'est expliqué et les autres sources nous balance ca comme si on pouvait tout comprendre sans commentaire.
enfin voila tres utile ta source, meme si c'est un snippet :-)

encore bravo :-p
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 mars 2008 à 01:52
Oui ben si c'est en attente de validation sur codyx, c'est pas la peine de le poster ici...
Pour deux raisons :
- ça va faire doublon
- c'est pas sa place.

Dans la rubrique sources, on ne mets généralement pas des codes de 5 lignes qui peuvent tenir en une seule. On met plutôt des classes, des utilitaires complets.
Le but de codyx est justement d'accueillir les "mini-sources"

Faut juste pas être pressé à la seconde... Y'a rien d'urgent à partager une fonction...
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 01:49
neigedhiver justement, c'est aussi en attente de validation sur Codyx.
Comme je l'ai dit, c'est quelque chose de basique (d'où certain développeur).
Je dépose une aide, après, chacun l'arrange à sa sauce...

C'est basique quoi...
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 01:45
Ou sinon, tu as plus simple, avec des print au lieu de tableau :

<? php
$fichiers = glob('./*');
print_r($fichiers);
?>
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 mars 2008 à 01:43
Ah j'viens de voir les commentaires précédents...

Pour récupérer les fichiers dans un tableau, il suffit de lire la doc de PHP, la fonction glob() sert à ça...
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 mars 2008 à 01:42
Salut,

Sans vouloir faire le rabat-joie, ça aurait plus sa place dans les snippets de codyx qu'ici...
Sans vouloir te vexer non plus, tous les fichiers n'ont pas d'extension. Certains répertoires peuvent aussi avoir un . dans leur nom.

Exemple :
/home/myself/myscript.php/README

Sur les OS de type Unix/Linux, les répertoires sont des fichiers. Ils sont même éditables avec un éditeur de fichier, c'est dire (c'était juste pour l'anecdote).

Allez, en une ligne :

<?php echo 'Il y a ' . ($nb = count(scandir('/dossier/a/traiter')) - 2) . ' fichier' . (($nb>0) ? 's' : '') . ' dans le dossier'; ?>

Vraiment, c'est un snippet, pas une source...
MJ92 Messages postés 185 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 14 décembre 2014
31 mars 2008 à 01:41
Pour cela, il y a un code pour récupérer en array, c'est un code totalement différent...

Essayes ceci:

<?php
/* On récupère les fichiers du répertoire dans un tableau $fichiers */
$dir = opendir(".");
$fichiers = array();
while ($nom = readdir($dir)) {
$fichiers[] = $nom;
echo $nom.'
';
}
closedir($dir);
?>

Pas essayé, mais logiquement, ça devrait fonctionner...
mehdi7604 Messages postés 118 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 6 mars 2015
31 mars 2008 à 01:27
Bonjour ,
C'est vraiment utile pour mon site , mais es ce que vous pouvez récupérer les noms de fichiers dans un tableau par exemple ?
( dans un dossier où on ne connais pas les fichiers )