begin process at 2012 05 27 20:01:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > EFFACER LES FICHIERS IMAGES ( .PNG ), D'UN RÉPERTOIRE TEMPS VIEUX DE PLUS D'UN CERTAIN TEMPS (À DÉFINIR) DE FAÇON RÉCURENTE !

EFFACER LES FICHIERS IMAGES ( .PNG ), D'UN RÉPERTOIRE TEMPS VIEUX DE PLUS D'UN CERTAIN TEMPS (À DÉFINIR) DE FAÇON RÉCURENTE !


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :effacer fichier, libérer répertoire, gérer stock-repertoire Niveau :Débutant Date de création :27/12/2009 Date de mise à jour :30/12/2009 04:28:10 Vu / téléchargé :2 546 / 53

Auteur : christophe0511

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 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

  • <?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
  • ?>
<?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.




 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

28 décembre 2009 14:02:40 :
Nix est un Dieu, moi une merde !
28 décembre 2009 16:48:25 :
Je voulais juste proposer un bout code. En le soumettant, j'étais prêt à recevoir d'éventuelles corrections ! Je ne m'attendais pas à une remarque aussi violente ! Neigedhiver si tu es si désabusé... Ne regarde plus ce site ... va à la pêche cela détend !!!!!
28 décembre 2009 23:40:36 :
Un bonne explication vaut mieux que toutes les querelles ! je remplace donc : while($file = $O -> read()) //<-- mauvais car s'il existe un fichier exemple "0" il retourne false et stop la boucle alors que d'autres fichiers seraient encore là (explications fournies par Neigedhiver en MP) modifier par : while(FALSE !== ($file = $O -> read())) //<-- Syntaxe correcte demander à Neigedhiver pour plus d'explications) Que d'encre pour un cas d'école, mais je reconnais que l'on doit écrire dans les règles de l'art! Et à mon tour présente mes excuses à ceux que j'ai pu heurter !
29 décembre 2009 02:38:34 :
Rien juste une coquille dans la description
30 décembre 2009 03:30:43 :
Suite à la juste remarque de Inwebo, Je simplifie donc le test de l'extension et pour que cette fonction puisse être cette fois adaptable très simplement, je mets tous les paramètres en variables, envoyés à l'appel de la fonction.
30 décembre 2009 03:47:58 :
juste une erreur de frappe!
30 décembre 2009 04:28:10 :
Rien, une erreur de frappe dans descriptif.

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

Commentaires et avis

Commentaire de neigedhiver le 28/12/2009 13:03:02

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é.

Commentaire de inwebo le 28/12/2009 19:05:28

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.

Commentaire de neigedhiver le 28/12/2009 19:58:52

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 ?

Commentaire de christophe0511 le 28/12/2009 19:58:57

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,

Commentaire de Benjamin37 le 28/12/2009 21:05:10 1/10

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

Commentaire de inwebo le 29/12/2009 22:24:52

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.

Commentaire de neigedhiver le 30/12/2009 00:59:17

[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 ?
[/HORS 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' && .....)

Commentaire de christophe0511 le 30/12/2009 03:44:20

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é.

Commentaire de neigedhiver le 30/12/2009 03:54:45

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.

Commentaire de christophe0511 le 30/12/2009 04:17:58

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 !

Commentaire de kohntark le 02/01/2010 15:50:54

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

Commentaire de solakin2 le 02/12/2010 22:10:51

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.

Commentaire de christophe0511 le 02/12/2010 23:03:30

Avec plaisir !

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales