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

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

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

<?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.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2011

Пока что я вижу две несогласованные вещи в вашем коде.

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

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

0 голосов
/ 06 ноября 2011

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

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

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

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

foreach (glob("$folder/*") as $team) { 
    $lastmoddate = filemtime("$folder/$team");
    ... date stuff ...
    $sort[]= basename($team);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...