php скрипт для удаления файлов старше 24 часов, удаляет все файлы

Я написал этот php-скрипт для удаления старых файлов старше 24 часов, но он удалил все файлы, включая более новые:

<?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);
           }
        }
     }
   }
?>

person ChuckO    schedule 27.06.2010    source источник
comment
На какой ОС вы это используете? Win32 или Unix / Linux?   -  person Aaron Harun    schedule 27.06.2010
comment
не должно быть ›86400?   -  person neal aise    schedule 27.06.2010
comment
Это в системе Linux. Я вижу свою ошибку. Но почему он удалил и старые файлы?   -  person ChuckO    schedule 27.06.2010
comment
Потому что что-то меняет метаданные файлов.   -  person Ignacio Vazquez-Abrams    schedule 27.06.2010
comment
возможный дубликат Как удалить файлы из каталог на основе даты создания в php?   -  person Gordon    schedule 23.01.2012
comment
Будьте осторожны и с конечными слешами. Если $path не имеет косой черты в конце, этот код завершится ошибкой.   -  person Tyler V.    schedule 28.02.2015


Ответы (4)


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

Если текущее время и время изменения файла находятся в пределах 86400 секунд друг от друга, то ...

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

Думаю, это может быть твоей проблемой. Измените его на> или> =, и он должен работать правильно.

person ssube    schedule 27.06.2010

<?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);
    }
}

?>

Вы также можете указать тип файла, добавив расширение после * (подстановочный знак), например

Для изображений jpg используйте: glob($dir."*.jpg")

Для файлов txt используйте: glob($dir."*.txt")

Для файлов htm используйте: glob($dir."*.htm")

person Mike    schedule 25.11.2012

  1. Вместо этого вы хотите >.
  2. Если вы не работаете в Windows, вам нужно filemtime().
person Ignacio Vazquez-Abrams    schedule 27.06.2010

работает нормально

$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);
      }
    }
}
}
person saefry    schedule 08.09.2016