Как получить даты последнего изменения всех файлов в папке и сравнить их с определенной датой? php

Кто-нибудь знает способ получить даты последнего изменения всех файлов в папке и сравнить их с определенной датой?

Пока у меня это.

<?php
    $lastmoddate = (date("Ymd", filemtime($file)));
    $todaysdate = date("Ymd", time());

    $result = array(); 
    $folder = ('uploaded_files/');     
    $handle = opendir($folder);

    foreach (glob("$folder/*") as $team){$sort[]= end(explode('/',$team));}

    while (false !==($file = readdir($handle)))
    {
        if ( $file != ".." && $file != "." )
        {
            $file = "uploaded_files/".$file ;
            if (!is_dir($file))
                $result[] = $file;
        } 
    }
    closedir($handle);


    foreach ($result as $file){
        if ($lastmoddate > $todaysdate){
            if (strpos($file, "+12:00") !==false){
                echo "$file".",".date ("h:i d/m/Y", filemtime($file))."\r\n"."<br/>";
            }
        }
    }
?>

Это не работает, так как $lastmoddate = дает мне дату 1969 12 31.


person user1026866    schedule 06.11.2011    source источник
comment
пожалуйста, научитесь делать отступы в своем коде. это чертовски тяжело читать, когда пытаешься разобраться во всем. -1 пока.   -  person Your Common Sense    schedule 06.11.2011
comment
у ваших файлов действительно есть часть +12:00 в их именах   -  person Your Common Sense    schedule 06.11.2011
comment
Извините, я только начал изучать php. Попробую почистить код. Да, мои файлы называются +12:0004:31 06.11.2011-Banner.jpg я хотел записать ЧАСОВЫЕ ПОЯСА в именах файлов   -  person user1026866    schedule 06.11.2011


Ответы (2)


Пока я вижу 2 несовместимых вещи в вашем коде.

  1. вы получаете lastmoddate только один раз, не для существующих файлов, а для некоторого неопределенного (пока) $file

  2. сравнение с вами свиданий не имеет смысла. Скажем, даже если ваш файл был изменен сегодня, его дата никогда не будет больше, чем сегодняшняя дата, так что все ваши сравнения точно не пройдут. По крайней мере, используйте >= или == для сравнения, а не >

person Your Common Sense    schedule 06.11.2011
comment
Файлы были изменены в -10GMT, а веб-сайт основан на +10GMT. Итак, $todaysdate означает -10GMT. из того, что вы видите... каким будет значение $file? - person user1026866; 06.11.2011

PHP-функция filemtime() (которая внутри просто вызывает stat() и возвращает только значение m-time) работает с одним файлом за раз.

В вашем скрипте уже есть вызов glob() для получения списка имен файлов. Поместите вызов filemtime() внутри этого цикла, чтобы получить mtime каждого файла, и выполните там сравнения.

Ваш код не работает, так как вы не присвоили значение $file в тот момент, когда вы выполняете начальный вызов filemtime(), поэтому в случае ошибки возвращается логическое значение FALSE, которое преобразуется в целое число 0 для форматирования date(). Вы находитесь в часовом поясе с отрицательным значением GMT, поэтому оно преобразуется в дату немного ДО 1 января 1970 года, что соответствует времени 0 в UTC.

Что вам нужно:

foreach (glob("$folder/*") as $team) { 
    $lastmoddate = filemtime("$folder/$team");
    ... date stuff ...
    $sort[]= basename($team);
}
person Marc B    schedule 06.11.2011
comment
Было бы правильно написать это для даты codepad.org/br26FKt3 - person user1026866; 06.11.2011