0

我正在运行一个程序,其中它的一部分迭代一个目录并将最近的日期存储在一个变量中,并将最近的文件夹的名称存储在另一个变量中。我设置了一系列警报,以便我可以调试。

警报顺序:

  • 表示当前子目录和时间
  • 然后是子目录 date 被称为“temp”和 latest date 的变量。
  • 然后“更新时间”,如果温度比“最新”更近
  • 如果温度比“最新”更近,则“时间已更改”
  • 然后它表示与该日期关联的新的最新时间和最新文件夹名称

我的问题是通过第一个子目录,这一切都正常。然后第二个目录就搞砸了。前 2 个警报是预期的(顺便说一下,第二个目录比第一个目录旧)。第三个和第四个警报被跳过(如预期的那样)。但第 5 个警报显示最新文件夹变量已更改为当前子目录(但最新时间仍与过去迭代的子目录时间相同)。

希望这是有道理的....这里是代码

<?php  
    $files = array();
    $latestTime = date("1900-01-01"); ///older then any of the folders will be
    $latestFolder = "none";
    foreach (new DirectoryIterator('./images/ISGC_images/') as $fileInfo) { ///iterate through directory
        if($fileInfo =="."|$fileInfo == "..") continue;
        if($fileInfo->isDir()) { 
                echo "<script type='text/javascript'>alert('".$fileInfo." was updated ".date("F d Y H:i:s.",filemtime('./images/ISGC_images/'.$fileInfo))."');</script>";
                $tempDate = date("F d Y H:i:s.",filemtime('./images/ISGC_images/'.$fileInfo));
                echo "<script type='text/javascript'>alert('"."temp time is ".$tempDate.'and latest time is'.$latestTime."');</script>";
                if ($tempDate > $latestTime)
                    echo "<script type='text/javascript'>alert('"."update time"."');</script>"; 
                if ($tempDate > $latestTime) { 
                    $latestFolder = $fileInfo;
                    $latestTime = $tempDate;
                    echo "<script type='text/javascript'>alert('"."Time Changed!"."');</script>"; 
                }
                echo "<script type='text/javascript'>alert('"."latest folder is ".$latestFolder."');</script>"; 
                echo "<script type='text/javascript'>alert('"."latest time is ".$latestTime."');</script>"; 
            }                    
        }              

?>

回答

第 14 行需要改为 $latestFolder = (string)$fileInfo; 因为文件夹对象显然不能存储在变量中

4

1 回答 1

1

你直接比较你的日期,而它们仍然是字符串。这似乎默认为字母字符串比较,所以你说“01-01-1980”>“01-01-1900”,这可能不适用于下一个字符串比较,就像“apple”>“pear” .

请尝试使用实际时间比较来代替。例如:

 if (strtotime($tempDate) > strtotime($latestTime)

这部分似乎也没有意义:

if($fileInfo->isDir()) { 
    (...)
    if (file_exists('./images/ISGC_images/'.$fileInfo));

因此,即使它是一个目录,您也会执行 file_exists('folder'.)?当然,这不会是一个文件。要遍历子目录中的文件,您必须执行与您在顶部执行的操作类似的操作。

尝试通过这些提示自己解决问题。

于 2013-08-13T15:22:12.383 回答