web-dev-qa-db-fra.com

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

J'ai écrit ce script php pour supprimer les anciens fichiers de plus de 24 heures, .__, mais il supprimait 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
ChuckO
(time()-filectime($path.$file)) < 86400

Si l'heure actuelle et l'heure modifiée du fichier sont à 86400 secondes l'une de l'autre, alors ...

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

Je pense que cela peut être votre problème. Changez-le en> ou> = et cela devrait fonctionner correctement.

29
ssube
<?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 * (caractère générique), par exemple

Pour les images jpg, utilisez: glob($dir."*.jpg")

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

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

56
Mike
  1. Vous voulez plutôt >.
  2. À moins que vous ne fonctionniez sous Windows, vous préférez utiliser filemtime().
8
<?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
cfv1000

fonctionne 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
saefry

$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
Adam Pery