IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

nom de fichier commençant par


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut nom de fichier commençant par
    Bonjour,

    Le script suivant, me sert à supprimer des fichiers dans un répertoire xxxxx.
    j'ai donné comme instructions de supprimer les fichiers avec extension .jpg datant de plus de 48 heures.
    Par contre, je ne veux pas supprimer tous les fichiers, mais seulement ceux dont le nom commence par "images" (ces fichiers sont notés par exemple comme ça : images_23545_526.jpg.
    Je ne parviens pas à rajouter la bonne instruction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    suppression( "xxxxx" , "jpg" , "172800" );
     
    function suppression($dossier_traite , $extension_choisie,  $age_requis)
    {
     
    $repertoire = opendir($dossier_traite);
     
    while(false !== ($fichier = readdir($repertoire)))
            {
                    $chemin = $dossier_traite."/".$fichier;
                    $infos = pathinfo($chemin);
    	        $extension = $infos['extension'];
                    $age_fichier = time() - filemtime($chemin);
     
                    if($fichier!="." AND $fichier!=".." AND !is_dir($fichier) 
    AND $extension == $extension_choisie  AND $age_fichier > $age_requis)
                    {
                    unlink($chemin);
                    }
            }
    closedir($repertoire); 
    }
    ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    une petite regex :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $fichier = 'images_23545_526.jpg';
    $pattern = '#(images.*\.jpg)#';
    if(preg_match($pattern,$fichier)){
    	echo 'Fichier '.$fichier.' : à supprimer !<br />';
    }
    ?>

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 326
    Par défaut
    autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (glob("/dossier/images_*.jpg") as $fichier) {
        echo "$fichier date " . filemtime($fichier);
    }

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut imbriquer
    Bonsoir jreaux62,
    Bonsoir papajoker,

    Merci pour votre réactivité. Je ne suis néophyte...
    Pourriez-vous m'indiquer ou je dois inclure l'une ou l'autre de vos solutions à l'intérieur de mon script ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Fais des tests dans une page séparée pour mieux voir le fonctionnement.

    Ensuite tu peux créer une fonction qui exécute le code et tu l'intègre comme tu avais intégré ta précédente fonction.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Alors c'est ok ?

    Je te donne encore une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    function supprimerFichierRegexTime ($dossier,$match,$age_requis)
    {
    	$files = new RegexIterator(new DirectoryIterator($dossier),$match);
    	foreach ($files as $fileinfo) if (time() - $fileinfo->getMTime() > $age_requis) unlink($fileinfo->getPathname());	
    }
     
     
    $dossier = 'Images';
    $match = '#images.*\.jpg#';
    $age_requis = 172800;
     
    supprimerFichierRegexTime($dossier,$match,$age_requis);
    ?>
    Niveau rapidité d'exécution, le code de papajoker ira aussi vite.

    L'avantage de mon exemple est d'utiliser les fonctions de recherche des regex qui sont beaucoup plus évoluées et faciles à utiliser que les fonctions de recherche de la fonction glob (sauf dans des cas simples de recherche comme ton exemple).

    Un avantage supplémentaire par rapport aux fonctions que tu utilisais dans ton premier code ("opendir", "readdir") ou par rapport à la fonction "glob" est que l'utilisation des "nouvelles" classes comme "DirectoryIterator" permet une gestion optimisée des erreurs.

    Tu pourras donc gérer facilement les erreurs en appelant ta fonction dans un bloc try/catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //...
    $dossier = 'Images';
    $match = '#images.*\.jpg#';
    $age_requis = 172800;
     
    try
    {
        supprimerFichierRegexTime($dossier,$match,$age_requis);
    }
    catch (Exception $e) 
    {
        echo $e->getMessage();
    }

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 326
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    L'avantage de mon exemple est d'utiliser les fonctions de recherche des regex
    Pas précis dans la doc, mais, en cherchant bien, il y a bien un petit système de "regex"
    http://fr.php.net/manual/fr/function.glob.php#88250

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut test
    Bonsoir à tous,

    Merci de votre aide, je vais tester tout ça et je vous rend compte.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Pas précis dans la doc, mais, en cherchant bien, il y a bien un petit système de "regex"
    http://fr.php.net/manual/fr/function.glob.php#88250
    Bah oui je sais bien qu'on peut bricoler un peu mais tu as oublié la deuxième partie de ma phrase :
    Citation Envoyé par ABCIWEB
    les fonctions de recherche des regex sont beaucoup plus évoluées et faciles à utiliser que les fonctions de recherche de la fonction glob (sauf dans des cas simples de recherche comme ton exemple)
    Quand on connait un peu php on connait un peu les regex... mais pas nécessairement les fonctions de recherche de la fonction "glob". Et si c'est pour s'apercevoir, en se plongeant dans la doc de la fonction "glob", qu'au final on y trouve pas d'avantages mais surtout beaucoup de limitations... bah la conclusion est vite déduite
    Depuis la création de la SPL cette fonction "Glob" n'a donc plus grand intérêt pour faire des recherches sur les fichiers - sauf pour des recherches basiques mais pourquoi choisir une fonction bridée (et obscure pour la plupart des développeurs php) et qui sera finalement moins facilement réutilisable ?

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 326
    Par défaut
    Je prend une bonne résolution
    un nouveau gist et j'ai déjà oublié glo???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function glob($dossier,$fichiersName){
    return new RegexIterator(new DirectoryIterator($dossier),$fichiersName);
    }
     
    $files= glob('/dossier/', '#images.*\.jpg#');

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut

    Perso ça fait quelques années que je l'ai oubliée cette fonction "glo??".
    Plus précisément lorsque j'ai commencé à développer mes premières classes (avant je faisait du procédural) dont cette classe d'upload avec option de redimensionnement. Je me rappelle avoir pesté contre le maudit système de recherche de cette fonction ce qui m'a obligé à m'intéresser aux nouvelles classes de la spl. Evidemment j'aurais pu me rabattre sur un opendir readdir et un regex mais tant qu'à faire dans le nouveau...

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut solution adopté
    Bonjour,

    Merci à tous, j'ai finalement adopté la solution d'ABCIWEB ci-dessous.
    Par contre je ne suis pas parvenu à ajouter d'autres extensions à supprimer (.jpeg .gif etc).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    function supprimerFichierRegexTime ($dossier,$match,$age_requis)
    {
    	$files = new RegexIterator(new DirectoryIterator($dossier),$match);
    	foreach ($files as $fileinfo) if (time() - $fileinfo->getMTime() > $age_requis) unlink($fileinfo->getPathname());	
    }
     
     
    $dossier = 'xxxxxxx';
    $match = '#image.*\.jpg#';
    $age_requis = 86400;
     
    try
    {
        supprimerFichierRegexTime($dossier,$match,$age_requis);
    }
    catch (Exception $e) 
    {
        echo $e->getMessage();
    }
    ?>

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il suffit de modifier la regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $match = '#^(images.*\.(?:jpg|jpeg|gif|png))$#i';
    N.B. le "i" à la fin la rend insensible à la casse.
    Elle prend donc aussi en compte .JPG, .JPEG, .GIF et .PNG.

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut solution adopté
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Noms de fichiers commençant par un chiffre ?
    Par Mister Paul dans le forum Langage
    Réponses: 4
    Dernier message: 15/03/2011, 21h57
  2. Réponses: 3
    Dernier message: 03/11/2007, 19h44
  3. Nom du fichier font par rapport au nom de la FONT
    Par sergior77 dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/11/2006, 17h48
  4. [XSLT] Insertion du nom du fichier XML par transformation XSL
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/07/2006, 12h40
  5. Noms des fichiers téléchargés par wget
    Par benj63 dans le forum Linux
    Réponses: 2
    Dernier message: 22/02/2006, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo