简体   繁体   中英

How Can I Delete Files Older Than 7 Days Using PHP?

I want to be able to delete all files in a directory that older than seven days old using only PHP. How can I do this? The server is using Debian Linux.

<?php
// (A) DELETE ONLY IF OLDER THAN SET DATE
function delold ($keepDate, $folder) {
  // (A1) GET ALL FILES INSIDE FOLDER
  $files = glob("$folder*", GLOB_BRACE);

  // (A2) LOOP, CHECK LAST MODIFIED, DELETE
  if (count($files)>0) { 
    $keepDate = strtotime($keepDate);
    foreach ($files as $f) { if (filemtime($f) < $keepDate) {
      echo unlink($f)
        ? "$f deleted\r\n"
        : "Error deleting $f\r\n" ;
    }}
  }
}

// (B) GO!
// DATE FORMAT YYYY-MM-DD... OR ANYTHING THAT STRTOTIME CAN UNDERSTAND
delold("2020-11-10", "d:/test/");

The 604800 is how many seconds are in a week.

$path="whateverdir/";
(time()-filectime($path.$file)) > 604800;
unlink($path.$file);

If you have more than one directory, you would have to do this for each directory.

A simple PHP function to delete files older than a given age. Very handy to rotate backup or log files, for example...

<?php
/**
 * A simple function that uses mtime to delete files older than a given age (in seconds)
 * Very handy to rotate backup or log files, for example...
 * 
 * $dir String whhere the files are
 * $max_age Int in seconds
 * return String[] the list of deleted files
 */

 function delete_older_than($dir, $max_age) {
  $list = array();

  $limit = time() - $max_age;

  $dir = realpath($dir);

  if (!is_dir($dir)) {
     return;
  }

  $dh = opendir($dir);
  if ($dh === false) {
    return;
  }

  while (($file = readdir($dh)) !== false) {
     $file = $dir . '/' . $file;
     if (!is_file($file)) {
     continue;
  }

  if (filemtime($file) < $limit) {
      $list[] = $file;
      unlink($file);
  }

 }
 closedir($dh);
 return $list;

}

// An example of how to use:
$dir = "/my/backups";
$to = "my@email.com";

// Delete backups older than 7 days
$deleted = delete_older_than($dir, 3600*24*7);

$txt = "Deleted " . count($deleted) . " old backup(s):\n" .
implode("\n", $deleted);

mail($to, "Backups cleanup", $txt);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM