0

その一部がディレクトリを反復処理し、最新の日付を変数に格納し、最新のフォルダーの名前を別の変数に格納するプログラムを実行しています。デバッグできるように一連のアラートを設定しました。

アラートの順序:

  • 現在のサブディレクトリと時刻を表す
  • 次に、「temp」と呼ばれるサブディレクトリの日付と最新の日付を持つ変数。
  • 次に、temp が「latest」より新しい場合は「update time」
  • 次に、temp が「latest」より新しい場合は「Time changed」
  • 次に、その日付に関連付けられた新しい最新時刻と最新のフォルダー名を表します

私の問題は、最初のサブディレクトリを介して、これがすべて正常に動作することです。次に、2番目のディレクトリがめちゃくちゃになります。最初の 2 つのアラートが予想されます (ちなみに、2 番目のディレクトリは最初のディレクトリより古いです)。3 番目と 4 番目のアラートはスキップされます (予想どおり)。しかし、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 に答える