#php #datetime #foreach #last-modified #strpos
#php #дата и время #foreach #последнее изменение #strpos
Вопрос:
Это возвращает изображения из моей папки.
$dirname = "./uploaded_files/";
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg){
if(!in_array($curimg, $ignore)) {
};
Это возвращает даты последнего изменения для каждого файла в папке.
$result = array();
$folder = ('uploaded_files/');
$handle = opendir($folder);
foreach (glob("$folder/*") as $team){$sort[]= end(explode('/',$team));}
Создание массива, содержащего файлы в текущем каталоге:
while (false !==($file = readdir($handle)))
{
if ( $file != ".." amp;amp; $file != "." )
{
$file = "uploaded_files/".$file ;
if (!is_dir($file))
$result[] = $file;
}
}
closedir($handle);
Это мое IF И ДЛЯ КАЖДОГО оператора (вот моя проблема)!!!
$lastmoddate = (date("Ymd", filemtime($file)));
$todaysdate = (date("Ymd"));
foreach ($result as $file){
if ($lastmoddate <= $todaysdate){
if (strpos($file, " 12:00") !==false){
echo "$file".",".date ("h:i d/m/Y", filemtime($file))."rn"."<br/>";
}
}
}
что я пытаюсь сделать, так это «если имена файлов содержат 12:00 и если последние измененные даты для каждого файла меньше или равны сегодняшней дате, тогда эхо-изображения! НО это не работает.
Кто-нибудь может помочь мне выяснить, как переписать мое заявление!?
Я только начал изучать PHP, кто-нибудь может помочь!?
Спасибо
Ответ №1:
Используя функцию date(), вы преобразуете целочисленную дату в удобочитаемую дату. При этом вы больше не сможете сравнивать даты (в формате d m y, который вы используете).
Самым простым решением было бы изменить формат даты с «d m y» на «Ymd», чтобы его можно было сравнить как число.
Кроме того, вы упоминаете, что дата изменения должна быть меньше или равна, но ваш код использует >=, поэтому вам может потребоваться изменить это.
Комментарии:
1. Эй, спасибо за это! Я забыл упомянуть в приведенном выше коде, что существует СПИСОК файлов, а не только один, знаете ли вы, как это будет работать для меня, используя foreach? Это то, что я получил до сих пор, но $ lastmoddate имеет только ОДНО значение файла… кажется, я не могу получить фактическую дату последнего изменения для каждого файла.. есть идеи? 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/>»; } } }
2. Предполагая, что $result — это список файлов, просто поместите filemtime() внутрь foreach. foreach($result as $file){if(date(«Ymd»,filemtime($file)) >= date(«Ymd»,time())){/* etc ..*/} Код немного сжат, но, надеюсь, вы получите представление.