Bonjour,

Voila, je dévellope une petite fonction qui va me permettre de compter le nombre de fichiers présents dans un dossier.

Je rencontre un soucis, parceque je voudrais récupérer les extentions souhaités lors de l'appel de la fonction, et en fonction, compter uniquement ce(s) type(s) de fichier(s).

Voici ma fonction, et comment je l'appel.
Ps: Si vous pouvez aussi m'aider à l'optimiser, n'hésitez pas svp ;-)

Appel de la fonction

<li>Il y'a <?= count_files('./stockage/'.$user_pseudo.'/') ?> fichiers dans mon éspace</li>

La fonction elle même

function count_files($dossier){
    if(isset($dossier)&&!empty($dossier)&&file_exists($dossier)&&is_dir($dossier))/*Verifie la variable et bien un repertoire*/
    {
        $rep=$dossier;
        $rep=str_replace("//","/",$rep);
        $handle = @opendir($rep);/* Ouvre le repertoire */
        if(!$handle)
          {
            Erreur('Erreur l\'ors de l\'ouverture de '.$rep.' !');
            exit;
        }
    }
    $nb_fichier = 0;
    while ($f = readdir($handle)) { //Boucle qui enumere tout les fichier d'un repertoire
        if(@is_dir($rep.'/'.$f)){ /*verifie si c'est un repertoire*/ 
        }elseif(@is_file($rep.'/'.$f)){/*Verifie si c'est bien un fichier*/
            $nom=strrchr($f,'.');
            $extension=substr($nom,1);
            if($extension=="txt" || $extension=="doc" || $extension=="docx"|| $extension=="pdf")
            {   
                // On incrémente le nombre
                $nb_fichier++;
            }
        }
    }
    return $nb_fichier;
}

Ce que je souhaite donc, c'est définir if($extension=="txt" || $extension=="doc" || $extension=="docx"|| $extension=="pdf") en fonction d'un paramettre passé à la fonction comme je le fais pour le $dossier.

Je vous remercie de votre aide.

Bien cordialement.

4 réponses


Soundboy39
Réponse acceptée

Désolé je suis allé un peu vite... et t'inquiête j'ai bien compris la finalité.

scandir($rep) va retourner la liste des fichiers dans un tableau, comme tous les tableaux tu peux le parcourir avec un foreach, ce qui donnera quelque chose du style :

$files = scandir($rep);
foreach($files as $f) {
//Filtre le type de fichier avec mime-content-type.php
}

Franchement je ne peux pas t'aider plus... la prochaine étape serait de tout faire à ta place et ce n'est pas le but ;-)

Bonjour,

Le nom du fichier (est donc son extension...) n'est pas vraiement une valeur sur.
Je te propose de te baser plutôt sur le type mime :
https://www.php.net/manual/fr/function.mime-content-type.php
https://developer.mozilla.org/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types

Sinon, je te propose aussi quelques préconisations pour améliorer le code :

  • seul le "is_dir($dossier)" est utile dans le 1er IF;
  • je ferais un "foreach(scandir($rep))" à la place du "while ($f = readdir($handle))"

Voilà, bon courage.

Fre3z69
Auteur

Nikel. Je comprends un peu le truc mais comment je récupére enfin initialise la variable $f ?

Et pour les extensions souhaitées ? si je veux afficher uniquement les pdf et word sans afficher les html ou php? je place tout dans un seul dossier unique images comprises pour récupérer les fonctions et surtout éviter de me casser la tête avec 46 miles dossier lol.
Le truc c'est que si un jour je veux joindre et créer un système qui gère les vidéos je récupére mes fonctions et je lui dit d'afficher uniquement les vidéos.
Mais là n'est pas le problème c'est vraiment accéder aux paramètres d'extensions voulues pour autoriser et rediriger dans le bon dossier le fichier ou image.

PS: j'espère que c'est compréhensible mes explications je suis sacrément a chier quand il faut expliquer ce que je veux faire mdr. Je suis pas pédant du tout ^^.

Merci à toi.

Cordialement

Fre3z69
Auteur

Pfff, désolé, hier je crois que j'étais plus en forme pour bien comprendre, c'est pas comme si des foreach j'en avais pas fait mdr.

Un grand merci à toi, je vais m'occuper de ton filtre mime-content-type, je reviendrais demander si besion, mais en tout cas merci.

;-)