2014-01-23 2 views
0

У меня есть папка «content», в которой будут созданы другие папки, и в этих папках есть html-страницы. Теперь, как я могу напечатать последний измененный html-файл в каждой папке?PHP получить последний модифицированный файл, несколько папок и файлов

папка ex.

content { 
      testfolder1 { file1.html,file2.html ecc..} 
      testfolder2 { file3.html,file4.html ecc..} 
     } 

выход будет:

file4.html was last insert or modfied 

Спасибо и извините за мой плохой английский :)

P.S. функция filemtime() ненавидят меня: D

Это код, который я имею в виду:

$list = scandir("content"); 
unset($list[0]); 
unset($list[1]); 


foreach($list as $v) 
{ 
    for ($i = 0; $i<=$v; $i++) 
    { 
     $gencat = "content/$v"; 
     $genlist = scandir($gencat); 
     unset($genlist[0]); 
     unset($genlist[1]); 

     foreach($genlist as $k) 
     { 
      $filetime = date("Y/M/D h:i" , filemtime($gencat . "/" . $k)); 
      echo $gencat . "/" . $k . " " . $filetime . "<br/>"; 
     } 
    } 
} 

ответ

3

Ну, делать следующим образом, создайте функцию, которая возвращает последнее измененное путем итерации над всеми из них и проверки измененного времени. Идея такова: когда вы начинаете итерацию, предположите, что первый файл является последним измененным. Продолжайте итерацию, а затем в каждой итерации проверьте файл, который, по вашему мнению, был последним изменен против нового. Если новый был изменен ранее, вы это измените. В итоге у вас будет последний измененный.

Вот код, который я имею в виду:

function lastModifiedInFolder($folderPath) { 

    /* First we set up the iterator */ 
    $iterator = new RecursiveDirectoryIterator($folderPath); 
    $directoryIterator = new RecursiveIteratorIterator($iterator); 

    /* Sets a var to receive the last modified filename */ 
    $lastModifiedFile = "";   

    /* Then we walk through all the files inside all folders in the base folder */ 
    foreach ($directoryIterator as $name => $object) { 
     /* In the first iteration, we set the $lastModified */ 
     if (empty($lastModifiedFile)) { 
      $lastModifiedFile = $name; 
     } 
     else { 
      $dateModifiedCandidate = filemtime($lastModifiedFile); 
      $dateModifiedCurrent = filemtime($name); 

      /* If the file we thought to be the last modified 
       was modified before the current one, then we set it to the current */ 
      if ($dateModifiedCandidate < $dateModifiedCurrent) { 
       $lastModifiedFile = $name; 
      } 
     } 
    } 
    /* If the $lastModifiedFile isn't set, there were no files 
     we throw an exception */ 
    if (empty($lastModifiedFile)) { 
     throw new Exception("No files in the directory"); 
    } 

    return $lastModifiedFile; 
} 
Смежные вопросы