EFFACER LES FICHIERS IMAGES ( .PNG ), D'UN RÉPERTOIRE TEMPS VIEUX DE PLUS D'UN

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 28 déc. 2009 à 13:03
christophe0511 Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 2 décembre 2010 - 2 déc. 2010 à 23:03
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/51021-effacer-les-fichiers-images-png-d-un-repertoire-temps-vieux-de-plus-d-un-certain-temps-a-definir-de-facon-recurente

christophe0511 Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 2 décembre 2010
2 déc. 2010 à 23:03
Avec plaisir !
solakin2 Messages postés 5 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 16 juillet 2010
2 déc. 2010 à 22:10
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.
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2010 à 15:50
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
christophe0511 Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 2 décembre 2010
30 déc. 2009 à 04:17
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 !
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 déc. 2009 à 03:54
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.
christophe0511 Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 2 décembre 2010
30 déc. 2009 à 03:44
Merci Inwebo pour ta remarque très pertinente et l'intérêt apporté à ma source. j'ai donc pris acte de tes deux remarques et modifié la source en conséquence !

Neigedhiver, J'espère que tu n'as rien contre : pathinfo($file, PATHINFO_EXTENSION) bon, ça fait plus de caractères que substr($file, -4), mais je pense que Apache peut supporter cela non ?
Plus sérieusement, si c'est PHPment correcte, c'est une autre méthode pour vérifier une extension de fichier tout simplement.
Sinon, et si tu as le temps peux-tu nous donner si possible une explication succincte pour faire progresser la communauté.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
30 déc. 2009 à 00:59
[HORS SUJET]
La Goudale, pas de problème... Ici, on a la Félis, brassée à Felletin avec de l'eau de source (non pasteurisée, donc fermentation encore en bouteille) et la 1000 (parce que plateau de millevaches).
Quelques litres, l'autre, hé... Pourquoi si peu ?
SUJET

Ah oui, j'avais été tellement obnubilé par mon problème avec readdir() que j'avais pas fait gaffe à ça.
Le mieux pour vérifier qu'un fichier se termine bien pas png est encore de vérifier avec substr :
if (substr($file, -4) == '.png' && .....)
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
29 déc. 2009 à 22:24
Je ne doute pas que ton code fonctionne !

Par contre :
- Tu n'utilises pas la bonne méthode pour tester l'extension d'un fichier. Imagine un nom de fichier avec des points à l'intérieur.
- Je rajouterai en paramètre le type de fichier, et la durée en seconde, comme cela, hop pas besoin de retoucher au code si un utilisateur veut se servir de ton script.

> Neighedhiver , quelques litres par personne suffiront de la Divine ou Goudal, mais avec modération hein.
cs_Benjamin37 Messages postés 59 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 18 mars 2010
28 déc. 2009 à 21:05
Bonsoir !

Ils sont où les fichiers ?

Si c'est pour mettre un petit bout de code à quoi cela sert de poster cela pour régler ses comptes :(

Bonne soirée
christophe0511 Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 2 décembre 2010
28 déc. 2009 à 19:58
Merci pour tes encouragements Inwebo!
A te lire c'est un honneur de que se faire insulter par Neigedhiver, j'en prends bonne note !

Je veux bien recevoir, ce que tu souhaites dire sur ma contribution, car à vrai dire et pour être tout à fait honnête, mon code fonctionne parfaitement sur mon site et je n'ai rien compris à ce qu'écrit Neigedhiver... Peut-être que je suis dans un cas particulier ou que ce qu'il dit ne se produit pas sur mon site !

Je pense que phpcs.com est fait pour partager et progresser et non pas se faire traiter d'imbécile de la première neige fondue (pour faire un jeu de mot avec Maître Neigedhiver)
en tout cas c'était la première fois que je postais une contribution!

Maintenant pour les bières, j'en veux bien une !

Cordialement,
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 déc. 2009 à 19:58
Ouaip... J'ai été rude. On règle ça en privé par mp, voilà voilà...

Sinon la pêche, pas pour moi. Mais les bières, pas de soucis... Combien de litres je prévois ?
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
28 déc. 2009 à 19:05
Salut,

Il ne faut pas le prendre comme cela, car Neigedhiver donne d'excellents conseils et si tu veux progresser essaye de ne pas prendre la mouche et replonge toi dans ton code. C'est vrai que c'était un peu "rude" comme message de sa part mais si tu fais un tour sur ce site tu verras qu'il a dû répéter ce qu'il vient de te dire quelques centaines de fois, il a pris le temps de te répondre ce qui est déjà un compliment, non ?

Moi par contre j'avais des choses à dire sur ta source à mon humble niveau bien sûr.

Allez Neigedhiver sort les bières et on va faire un partie de pêche, c'est vrai que c'est relaxant.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 déc. 2009 à 13:03
Salut,

Ca devient lassant les codes de ce genre qui en plus de ne pas innover ne sont même pas écrits correctement...
Je cite la doc (http://fr.php.net/manual/fr/class.dir.php) :
"Notez la façon dont la valeur de retour de dir::read() est vérifiée dans l'exemple suivant. Nous testons si la valeur est identique (égale et de même type que -- voyez opérateurs de comparaison pour plus de détails) FALSE sinon, toute entrée dans le nom serait évalué à FALSE causera l'arrêt de la boucle (exemple, un répertoire nommé 0)."

Désolé, c'est pas après toi personnellement, mais cette erreur est tellement récurente que vraiment, vraiment, c'est pénible, fatiguant, épuisant, lassant.

Et comme j'en ai aussi marre qu'on m'engueule parce que je dis du mal des sources que j'aime pas, je te remercie d'avoir partagé ce morceau de code avec la communauté de phpcs, c'est une excellente initiative.
Je t'invite cependant à corriger cette petite erreur qui peut éventuellement causer des erreurs inattendues (bien qu'on puisse s'y attendre...).
Je t'invite également à jeter un oeil à la SPL, plus particulièrement RecursiveDirectoryIterator, mais également FilterIterator ou encore ma source XDir (en toute modestie, encore qu'il doit bien trainer une ou deux personnes qui ne seraient pas de cet avis) et qui permet de faire la même chose en 4 lignes.

Je m'excuse encore, j'ai l'air désabusé, c'est probablement parce que je suis un peu blasé.
Rejoignez-nous