Effacer les fichiers images ( .png ), d'un répertoire temps vieux de plus d'un certain temps (à définir) de façon récurente

Soyez le premier à donner votre avis sur cette source.

Vue 4 654 fois - Téléchargée 201 fois

Description

Bonjour,
après avoir longtemps cherché sur le net un code qui correspond exactement à ce que je voulais, à savoir effacer les fichiers .png de mon répertoire temp, j'ai écrit celui-ci.
Ce code efface tous les fichiers du répertoire temps vieux de plus d'une demi-heure, dès qu'un visiteur ouvre la page. En effet sur mon site le visiteur est amené à créer des fichiers images .png de façon dynamique ... Si il imprime (tout va bien le serveur les unlink mais, si il quitte le site sans imprimer : Ils restent ... à force cela gonfle le répertoire temp.

Ce bout de code est adaptable : répertoire "temp" extension: ".png " et durée sont modifiables à votre situation !

Source / Exemple :


<?php
//************ Début code****************
// -------Début fonction ---------

function efface_fichier_dans_rep($path,$ext,$temps) {
    $O = dir($path);
    if(!is_object($O))
    return false;
    while(FALSE !== ($file = $O -> read())) {  
        if($file != '.' && $file != '..') {
            if(is_file($path.'/'.$file))
			{
			if((pathinfo($file, PATHINFO_EXTENSION)==$ext) && (filemtime($path.'/'.$file)<= (time()-$temps)))
			{
			unlink($path.'/'.$file);
			}
			}
			}
        }
    $O -> close();
    return true;
    }
// ---------Fin fonction
// On lance la fonction ici depuis n'importe quelle page du site avec le lien du répertoire concerné
//  "/xxx/xxxx/xxx/xxx/temp" lien côté Apache celui qui s'affiche quand on a une erreur de code par exemple....
efface_fichier_dans_rep("/xxx/xxxx/xxx/xxx/temp","png","1800");// 1800 = une demi-heure en secondes
// fin code
?>

Conclusion :


Pour ceux qui ont suivi le début de cette contribution, Il est des commentaires qui peuvent vous décourager, voir vous vexer très sérieusement, surtout lorsque c'est votre première contribution, que vous en êtes fier, que vous l'avez vérifiée sur votre site, quelle fonctionne et que vous vous faites un plaisir de vouloir la partager !
Ceci dit ... Les messages privés (MP) sont là aussi pour pouvoir discuter, il ne faut pas se laisser abattre dès le premier commentaire qui vous fait comprendre que vous n'avez rien à faire en PHP et que vous ennuyer "ceux qui savent" avec vos contributions pourries! Au contraire cela devient même (à mon sens ) très constructif ... je vous livre donc mon bout de code après une gentille explication avec Neigedhiver, que finalement je remercie pour ses explications exhaustives en MP, et ses excuses que j'accepte très volontiers et vous invite à aller voir sa source XDir ... qui en effet est une autre solution (pour ne pas dire LA solution) pour ce problème et bien d'autres sur la gestion des fichiers en PHP mais que malheureusement je n'avais pas découverte avant !

Amicalement
Christophe.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
2 décembre 2010

Avec plaisir !
Messages postés
5
Date d'inscription
dimanche 23 novembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010

Juste pour dire "Merci" !
C'est exactement ce qu'il me fallait et moi aussi j'ai eu du mal à trouver un script qui fait ça.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
T'es vraiment archi nul Christophe0511, ta fonction est vraiment pourrie, tu aurais mieux fait de la garder plutôt que venir la vomir ici.
Je viens de filer le sujet à Patch, Nacre et Kalyx (les toutous à papa) et ils font mieux que toi :

function efface_fichier_dans_rep($path,$ext,$temps) {
if (is_dir($path)) $O = dir($path); else return false;
while (FALSE !($file $O->read())) {
(substr(strrchr($path.'/'.$file, '.'), 1) === $ext && (filemtime($path.'/'.$file)<= (time() - $temps))) ? unlink($path.'/'.$file) : '';
}
$O->close();
return true;
}

;) Tu l'auras compris, c'est juste une note "d'humour" pour rebondir sur ces points :

- ça me fait toujours marrer que Neige s'en prenne plein la tronche avec ses commentaires;
(a noter que je n'ai aucune action chez lui et que je ne lui dois absolument rien ^^)
Je cite :
"se faire insulter"
"moi une merde !"
"aussi violente"
"traiter d'imbécile"
Je n'ai retrouvé nul part des propos qui pourraient justifier les tiens.
Comme cela a été très justement précisé par Inwebo son message n'est qu'"un peu rude", et ses contributions à CS sont parmi les plus importantes.
Tu aurais dû en tenir compte dans tes réponses, mais j'ai bien noté ton "...à mon tour présente mes excuses à ceux que j'ai pu heurter !"
Je ne doute pas que Neige t'en ai persuadé en 1 ou 2 MP.

Malheureusement, sur le fond, je ne peux être que d'accord avec, il y a toujours quelques nases pour massacrer les sources, en des termes au combien différents de ceux de Neige.
Moi même je ne poste jamais, mais je changerai peut être d'avis, en me faisant un plaisir de remettre à leurs places ces guignols.

En résumé :
Il faut savoir se mettre à la place des débutants, respecter leur travail et les encourager dans leur progression
Il faut savoir se mettre à la place des membres expérimentés qui voient passer des dizaine de sources de qualité contestable alors qu'ils ont répété des centaines de fois certaines "bonnes pratiques"
Il faut savoir casser, même méchamment, les sources ou les messages du forum (surtout) qui relèvent du foutage de gueule (et il y en a crois moi)

- pour en revenir à la source écrite très rapidement par mes potes canins (:o)) elle ne relève qu'à moitié de l'humour :
On cherche ici des fichiers ayant une certaine extension afin de les supprimer selon leur date de modification

Dans ce contexte pourquoi s'embêter à faire trop de tests ? (., .., pathinfo, ...)
Pourquoi tester is_object ?
Les tests de la validité du répertoire et du bon déroulement de la suppression me paraissent quant à eux nécessaires

(en cas de réclamation quant au code vite écrit => s'adresser aux crocs acérés de mes toutous) ^^

Cordialement,

Kohntark
Messages postés
4
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
2 décembre 2010

Merci Neigedhiver,
Comme quoi, les livres ont vraiment du bon ! -|^

Allez, je pense que ce bout code est maintenant valide pour toutes et tous, et s'il rend service à l'une ou l'autre j'en serais très heureux !
Je ne sais pas si je posterais encore, car ce n'est pas vraiment mon truc...(de poster)
Bien que finalement, je suis heureux d'avoir fait la connaissance d'un gars du plateau des millevaches, depuis l'Armorique !

Merci à vous !
et mes meilleurs vœux pour l'année qui s'annonce !
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Une explication sur quoi ? Moi je veux bien expliquer, mais je veux bien savoir quoi ! :)
J'ai tendance à dire que les deux méthodes se valent. Je ne sais pas si l'une est plus rapide que l'autre, il faudrait bencher, mais pour la différence que ça représente, je suis certain, sans avoir besoin de vérifier, que c'est complètement négligeable (bon pour traiter 3 millions de fichiers, ça peut commencer à prendre de l'importance, mais bon, de l'ordre du dixième de seconde, alors...)

Bref. J'ai tendance à utiliser pathinfo pour des fichiers avec chemin complet (puisque cette fonction est capable de séparer le répertoire, le nom du fichier et l'extension). Mais bon, c'est une habitude, pas une vérité absolue.
Afficher les 13 commentaires

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 et codes sources.

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