script php pour supprimer les fichiers de plus de 24 heures, supprime tous les fichiers

j'ai écrit ce script php pour supprimer les vieux fichiers de plus de 24 heures, mais il a supprimé tous les fichiers, y compris les plus récents:

<?php
  $path = 'ftmp/';
  if ($handle = opendir($path)) {
     while (false !== ($file = readdir($handle))) {
        if ((time()-filectime($path.$file)) < 86400) {  
           if (preg_match('/.pdf$/i', $file)) {
              unlink($path.$file);
           }
        }
     }
   }
?>
24
demandé sur Brian Tompsett - 汤莱恩 2010-06-27 06:40:15

6 réponses

(time()-filectime($path.$file)) < 86400

si l'heure courante et l'Heure de modification du fichier sont à l'intérieur de 86400 secondes l'un de l'autre, alors...

 if (preg_match('/\.pdf$/i', $file)) {
     unlink($path.$file);
 }

je pense que peut être votre problème. Changer de > ou >= et cela devrait fonctionner correctement.

28
répondu ssube 2010-06-27 02:45:03
<?php

/** define the directory **/
$dir = "images/temp/";

/*** cycle through all files in the directory ***/
foreach (glob($dir."*") as $file) {

/*** if file is 24 hours (86400 seconds) old then delete it ***/
if(time() - filectime($file) > 86400){
    unlink($file);
    }
}

?>

vous pouvez également spécifier le type de fichier en ajoutant une extension après le * (Joker) eg

pour les images jpg utiliser:glob($dir."*.jpg")

Pour les fichiers txt utilisation: glob($dir."*.txt")

Pour les fichiers htm utilisation: glob($dir."*.htm")

55
répondu Mike 2017-04-12 08:41:00
  1. > à la place.
  2. à moins que vous ne couriez sur Windows, vous voulez filemtime() à la place.
8
répondu Ignacio Vazquez-Abrams 2010-06-27 02:44:43
<?php   
$dir = getcwd()."/temp/";//dir absolute path
$interval = strtotime('-24 hours');//files older than 24hours

foreach (glob($dir."*") as $file) 
    //delete if older
    if (filemtime($file) <= $interval ) unlink($file);?>
6
répondu cfv1000 2013-07-01 11:14:29

fonctionne très bien

$path = dirname(__FILE__);
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
$timer = 300;
$filetime = filectime($file)+$timer;
$time = time();
$count = $time-$filetime;
    if($count >= 0) {
      if (preg_match('/\.png$/i', $file)) {
        unlink($path.'/'.$file);
      }
    }
}
}
0
répondu saefry 2016-09-08 04:40:54

$path = '/cache/';
// 86400 = 1day

if ($handle = opendir($path)) {
     while (false !== ($file = readdir($handle))) {
        if ( (integer)(time()-filemtime($path.$file)) > 86400 && $file !== '.' && $file !== '..') {
                unlink($path.$file);
                echo "\r\n the file deleted successfully: " . $path.$file;
        } 
     }
}
0
répondu Adam Pery 2018-09-03 13:10:28