我正在运行一个程序,其中部分程序遍历目录并将最新日期存储在变量中,将最新文件夹的名称存储在另一个目录中。我设置了一系列警报,以便我可以调试。
我的问题是通过第一个子目录,这一切都表现正常。然后第二个目录搞砸了。预计会有前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>";
}
}
?>
ANSWER
第14行需要更改为$ latestFolder =(string)$ fileInfo;因为文件夹对象显然不能存储在变量中
答案 0 :(得分:1)
你直接比较你的日期,而它们仍然是字符串。这似乎是默认为字母字符串比较,所以你说的是“01-01-1980”&gt; “01-01-1900”,可能不适用于下一个字符串比较,就像“apple”&gt; “梨”。
尝试使用实际的时间比较。 e.g:
if (strtotime($tempDate) > strtotime($latestTime)
此部分似乎没有意义:
if($fileInfo->isDir()) {
(...)
if (file_exists('./images/ISGC_images/'.$fileInfo));
所以,即使它是一个目录,你也可以使用file_exists('folder'。)?当然这不是文件。要遍历子目录中的文件,您必须执行与您在顶部执行的操作类似的操作。
尝试使用这些提示自行解决。