PHP exec ("ls-l") kullanarak değilse 1000 dosya varsa, biz dosya boyutlarında 1.000 kez olsun) (Stat aramak gerekiyor?

3 Cevap

Biz PHP exec ("ls-l") kullanabilirsiniz, ancak dosyaların listesini almak için () readdir () veya scandir kullanın ve aynı zamanda dosya boyutlarını ve belki değiştirilme tarihi listelemek istemiyorsanız, ihtiyacımız yok 1000 dosyaları vardır) (stat çağrısı 1000 kez olur? Basit veya daha hızlı bir yolu var mı?

1000 kez dosya sistemi bir çok hit () stat çağrıları olacak? Sadece RAM erişimi değil disk içeren bu kadar ya da belki OS bellekteki tüm verileri önbelleğe alır.

Update: o) (DirectoryIterator kullanmak iyi görünüyor, ama nasıl öğeleri sıralamak mı?

3 Cevap

LS sizin için arka planda istatistik işlevini çağırır. Bir dizin listeleme size sadece söz konusu dosya / klasör isimlerini verecek, böylece elle her dosya her dosya kendisi hakkında bilgi almak için iade tumblr gerekir. Yani evet, tüm bilgi almak için 1000 dosya STAT 1000 kez aramak gerekir. İdeal döngü içinde bunu yapacağız.

Neden exec() komutunu kullanarak? Eğer php5.x. varsa bu temiz ve iyi bir çözümdür :)

$files = new DirectoryIterator('/www/test/');
foreach ($files as $file) {
  if ($file->isFile()) echo $file->getSize();
}

http://php.net/manual/en/book.spl.php

Eğer, stat tüm bilgi gerekmez, ve gelen çıkışını ayrıştırmak zorunda değil eğer exec("stat $filename"), değiştirdiğiniz için tarih "özel" PHP komutları, yani filectime kullanabilirsiniz , filesize vb büyüklüğü için

EDIT: Ve şimdi yeni bir komut öğrendim :) PHP bir ilişkisel dizi döndürür, fstat vardır. Belki filectime dahili olarak kullanır? Neyse, exec, stat kullanmak ve bunu ayrıştırmak değildir.