1

フォルダ内のすべてのファイルの最終更新日を取得して特定の日付と比較する方法を知っている人はいますか?

これまでのところ私はこれを持っています。

<?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=日付19691231を取得するため、これは機能しません。

4

2 に答える 2

0

PHP のfilemtime() (内部的には基本的にstat()m-time 値のみを呼び出して返す) は、一度に 1 つのファイルに対して機能します。

glob()スクリプトには、ファイル名のリストを取得するための呼び出しが既にあります。そのループ内に filemtime() 呼び出しを配置し​​て、各ファイルの mtime を取得し、そこで比較を行います。

$file最初の filemtime() 呼び出しを行う時点で値を割り当てていないため、コードが機能していないため、失敗した場合はブール値が返され、書式設定のためにFALSE整数に変換されます。マイナス GMT のタイムゾーンにいるため、1970 年 1 月 1 日より少し前の日付に変換されます。これは UTC の時刻 0 です。0date()

必要なものは次のとおりです。

foreach (glob("$folder/*") as $team) { 
    $lastmoddate = filemtime("$folder/$team");
    ... date stuff ...
    $sort[]= basename($team);
}
于 2011-11-06T05:59:38.420 に答える
0

これまでのところ、コードに 2 つの矛盾があることがわかります。

  1. lastmoddate を取得しているのは、既存のファイルではなく、未定義の (まだ) $file に対して1 回だけです。

  2. あなたとデートするのは意味がありません。たとえば、ファイルが今日変更されたとしても、その日付が今日の日付を超えることはないため、すべての比較は確実に失敗します。少なくとも使用>=または==比較するためではなく、>

于 2011-11-06T06:00:17.103 に答える