Sur la Smart avec le flag de montage du disque noatime, fileatime et filectime ne sont pas corrects.
Exemple pour le fichier boot.ini, j’ai ce résultat:
Fonction Date Commande unix équivalente
fileatime(): 2022-05-30T15:13:30+02:00 ls -lu
filemtime(): 2020-11-12T15:35:08+01:00 ls -l
filectime(): 2023-04-25T03:16:53+02:00 ls -lc
A toi d’appeler la bonne fonction.
PS: En lisant le titre et les notes de la doc php de la fonction filectime, ce n’est pas la date de création du fichier mais la date de dernière modification de son inode qui est renvoyée.
Utilise filemtime qui est le seul avec une info correcte. filectime, c’est l’inode du fichier. fileatime ne fonctionne pas sur la Smart à cause du flag noatime dans le mount du disque.
C’était un lien vers un salon dev ou l’on parlait de -mtime et -atime sur la Smart.
Sinon, tu peux aussi le faire avec la commande find.
Lors de l’install d’un plugin, le core nettoie tous les fichiers qui ont plus de 7 jours avec cette commande:
19473 jours = 53,3 ans … Soit le nb de jour depuis le 01/01/1970 … Ce qui me fait dire que ta commande filectime(’$chemin/$file’) doit renvoyer 0
Donc, soit elle ne marche pas, soit, le fichier en question n’est pas présent
Que donne :
Je viens de faire quelques tests, c’ets pas si obvious car date_diff demande des objets date et time et filectime donnent des timestamp …
Autre remarque, comme dit par @jpty, filectime n’ets pas pertinent car il correspond à la derniere modif des inode. ce qui est notamment le cas lorsqu’il y a changement de droits … et une routine passe toutes les nuits sur Jeedom d’équerre. Il faut donc privilégier filemtime.
Du coup, ca donne
va le faire directement time et filemtime retournent des timestamps.
D’autre part, ce n’est pas très propre de détruire des fichiers (unlink) dans la liste des fichiers que l’on est en train de parcourir avec readdir. En C, ça crashe.
Il faut parcourir les fichiers et mémoriser ceux que l’on veut détruire dans un tableau.
Puis parcourir le tableau pour supprimer les fichiers.
J’ai enlevé && $file = $filetype dans le code parce qu’avec un seul = ce n’est pas un test et que je ne sais pas ce qu’est $filetype.
Si c’est le type de fichier qui doit être un fichier ‹ normal ›, le test pourrait alors être:
if (filetype("$chemin/$file") == 'file' )
à la place de
if ($file != "." && $file != "..")
Pas besoin de tester si le nom est . ou .. ce sont des répertoires.
Oui j’essaye de me former en ecrivant des blocs code pour faire des trucs concret mais bon je debute et je crois que je vais rester debutant.
En l’état le scritp fonctionne grace JPTY
Mais je ne vois pas comment filtrer sur des ficheirs *.mob ou *.jpg que je passe en parametre via mon scénario dans $filestype car si je rajoute cela, ca ne fonctionne plus