PHP Dosyaları tarihe göre sıralamak

2 Cevap php

Şu anda çıkış aynı dizin içindeki dosyaların listesi için bana izin verir bir index.php dosyası var, çıkış sonra dosya değiştirildiği zaman tarih göstermek için () işlevi filemtime kullanılan adlarını gösterir. benim sorunum şimdi nasıl son değiştirilmiş dosyayı göstermek için çıktıyı sıralamak olacak mı?, ben bir süre bunu nasıl düşünüyordum. Ben mysql etkileşimi ile onu yapıyorum sadece hiç sorun olacaktır. Bana son değiştirilmiş birinden başlayarak dosyaların listesini sıralamak ve çıkış için nasıl bir örnek göstermek lütfen. Bu şimdi ben ne var

if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
          if(strlen($file)-strpos($file,".swf")== 4){
            echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
           }
       }
   }
   closedir($handle);
}

2 Cevap

Sen son değiştirilme dosya sıralamak ve bulmak için bir diziye dosyaları koymak gerekir.


$files = array();
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
          $files[filemtime($file)] = $file;
       }
   }
   closedir($handle);

// sort ksort($files); // find the last modification $reallyLastModified = end($files);

foreach($files as $file) { $lastModified = date('F d Y, H:i:s',filemtime($file)); if(strlen($file)-strpos($file,".swf")== 4){ if ($file == $reallyLastModified) { // do stuff for the real last modified file } echo "$file$lastModified"; } }

Test edilmiş, ancak bunu nasıl thats.

Bu diziye bir. Swf uzantılı yol / / dosyaları tüm dosyaları almak ve sonra dosyanın mtime tarafından bu diziyi sıralamak

$files = glob('path/to/files/*.swf');
usort($files, function($a, $b) {
    return filemtime($a) < filemtime($b);
});

Üzerinde bir Lambda function kullanır ve PHP 5.3 gerektirir. Önce 5.3, sen yapardın

usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));

Eğer bir anonim işlevini kullanmak istemiyorsanız, sadece de normal bir fonksiyonu olarak geri arama tanımlamak ve usort onun yerine işlev adı iletebilirsiniz.

Çıkan dizi ile, sonra bu gibi dosyalar üzerinde yineleme olacaktır:

foreach($files as $file){
    printf('<tr><td><input type="checkbox" name="box[]"></td>
            <td><a href="%1$s" target="_blank">%1$s</a></td>
            <td>%2$s</td></tr>', 
            $file, // or basename($file) for just the filename w\out path
            date('F d Y, H:i:s', filemtime($file)));
}

Not Zaten denir çünkü filemtime when sorting the files, there is no additional cost when calling it again in the foreach loop due to the stat cache.