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

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

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

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

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

 <?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")

  1. Вы хотите > вместо этого.
  2. Если вы не работаете в Windows, вместо этого вы хотите filemtime() .
 <?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);?> 

хорошо работать

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