как сделать удаление файлов по дате создания или по шаблону?

Тема в разделе "Как сделать...", создана пользователем iskif, 31 июл 2013.

  1. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    Добрый день.
    автоматически (парсинг) наполняю сайт событиями (текст + картинка)
    Возникла необходимость удалять "устаревшие" картинки.
    Подскажите, пожалуйста, какой код дописать в парсер, чтоб он удалял все файлы из заданных папок с датой создания "-3 недели" от текущей даты?
    Или удалял все файлы, у которых начало имени меньше текущей даты на 21, но это гораздо сложнее по-моему. Но если проще, то картинки именуются по такому шаблону:
    /images/events/thumb/small/20130724_Name_0.jpg
    /images/events/thumb/20130724_Name_0.jpg
    /images/events/20130724_Name_0.jpg
     
  2. allseo

    allseo Создатель

    Регистр.:
    26 июн 2013
    Сообщения:
    38
    Симпатии:
    10
    Дату последней модификации можно получить функцией filemtime(), текущее - time(), и проверяешь разность, если она больше или равна 21*24*60*60, удаляешь файл функцией unlink().
     
  3. artxaker

    artxaker Создатель

    Регистр.:
    25 авг 2009
    Сообщения:
    39
    Симпатии:
    36
    PHP:
    <?php
    $dir 
    "images/";
    $imageExt = array("png","jpg","gif");
    $t time();
     
    if(
    file_exists($dir))
    {
        
    $files scandir($dir);
     
     
        for(
    $i 2$i count($files); $i++)
        {
     
            if(
    in_array(strtolower(pathinfo($files[$i], PATHINFO_EXTENSION)),$imageExt))
            {
         
                
    $fTime $t-filemtime($dir.$files[$i]);
         
                
    $fTime floor($fTime/60/60/24);
         
                if(
    $fTime >= 21)
                {
             
                    
    unlink($dir.$files[$i]);
                    echo 
    "deleting:".$dir.$files[$i]." <br>";
                } 
            }
        }
    }else{
        echo 
    "NO DIRECTORY SPECIFIED";
    }
    ?>

    Перейти по ссылке
     
    iskif нравится это.
  4. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    Спасибо, работает!
    Только удаляет файлы через один - это так задумано или побочный эффект?(не принципиально, за несколько проходов удалит всё, просто интересно :) )

    и ещё вопрос:
    в поддиректориях файлы не удаляются - возможно просто продублировать код ещё два раза, меняя только путь или надо разделить по файлам и запускать по-отдельности?
     
  5. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.407
    $i++ убери везде и будет все удалять
     
    iskif, dmx и Горбушка нравится это.
  6. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    Отлично! это ещё лучше.
    Только эксперимент показал, что лучше использовать -mtime
    Ctime - это дата изменения прав доступа, mtime - изменение содержимого