|
|
|
Yazan
|
Konu: Tüm Alt Dizinlerler Birlikte Dosya Sayısını Bulma (Okunma Sayısı 797 defa)
|
samandereli
Yeni Kullanıcılar
Offline
Mesaj Sayısı: 6
|
Öncelikle herkese bol hatasız kodlar diliyorum.
Benim derdim şu: sitemde "depo2" adında bir klasörüm var ve bu klasörde yüzlerce alt klasör ve binlerce dosya mevcut. Bazı dosyalar bir alt klasörde, bazıları onun altındakilerde. Ben, "depo2" klasörünün altındaki tüm dosyaların (klasörlerin değil) sayısını veren bir kod arıyorum. Forumda bununla ilgili bir kod var ama onda da alt klasörlerle ilgili bir sorun var. O kod şöyle idi:
<?php // Öncelikle dizin adını atayacağımız değişkenimizi oluşturalım. $dizin = "depo2"; // Burada da dizinimizi acıyoruz. $dir = opendir($dizin); while($dosya = readdir($dir)) { // Döngümüzü hazırladık şimdi dosya olup olmadıgını is_file deyimi ile kontrol edelim if(is_file($dizin."../../../".$dosya)) { Echo "Dosya : ".$dosya." "; } } // while bitti. ?>
Yardımlarınız için şimdiden teşekkür ederim.
|
|
|
|
|
Logged
|
|
|
|
|
obareey
|
çalışır mı bilmem ama bana mantıklı gibi geldi. çalışırsa tabi ki daha da geliştirilebilir. <?php
$dizin = "depo2"; function oku(){ $dir = opendir($dizin); while($dosya = readdir($dir)) { // Döngümüzü hazırladık şimdi dosya olup olmadıgını is_file deyimi ile kontrol edelim if(is_dir($dosya)){ //klasörse yine içini açıyoruz. echo "<b>Klasör: ".$dosya."</b><br>"; $dizin=$dosya; return oku(); } else { Echo "Dosya : ".$dosya."<br>"; } } } // while bitti. return oku(); ?>
|
|
|
|
|
Logged
|
|
|
|
|
|
|
obareey
|
üzerinde biraz çalışınca oldu. böyle bir fonksiyon yazdım. <?php function oku($dizin) { for($i=0;$i<substr_count($dizin,"/");$i++){ $bosluk.=" ";}//dizinler daha hoş gözüksün ;) $klasor[0]=$dizin; $dir = opendir($dizin); $i=0;//döngünün içini sayacağız. while(false !== ($dosya = readdir($dir))) { if($dosya=='.' || $dosya=='..'){//tüm dizinlerin içinde var. neden bilmem continue;} $i++; $klasor[1]=$dosya; $dizin=join($klasor,"/"); if(is_dir($dizin)){ //klasörse yine içini açıyoruz. echo $bosluk."<b>".$dizin."</b><br>"; oku($dizin); } else { echo $bosluk.$dosya."<br>"; } }// while bitti. if($i==0){ echo $bosluk."<i>Dizin boş</i><br>";} }?> bunu daha sonra herhangi bir yerde çağırabilirsin. <?php oku(depo2);?> bu arada php.net ten bir şey öğrendim: <?php // Note that !== did not exist until 4.0.0-RC2
if ($handle = opendir('/path/to/files')) { echo "Directory handle: $handle\n"; echo "Files:\n";
/* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { echo "$file\n"; }
/* This is the WRONG way to loop over the directory. */ while ($file = readdir($handle)) { echo "$file\n"; }
closedir($handle); } ?> iyi çalışmalar...
|
|
|
|
|
Logged
|
|
|
|
samandereli
Yeni Kullanıcılar
Offline
Mesaj Sayısı: 6
|
Çok güzel düşünülmüş bir kod. Gerçekten klasörlerin altını gördüm. Ama benim istediğim bu dosyaları listelemek değil sadece kaç adet dosya var bunun sayısını bulmak. Herhalde bir satır ile çözülecek hale geldi. Kodların içindeki $i değişkenini ekrana bastırsam belki olacak ama bunu da yapmıyor.
|
|
|
|
|
Logged
|
|
|
|
|
aziz
|
@ obareey ; if($dosya=='.' || $dosya=='..'){//tüm dizinlerin içinde var. neden bilmem . Bulunulan klasörü simgeler .. Bir üst klasörü simgeler Yani bunlar dizine yol gösteriyor gibi düşünebilirsiniz. Nasıl yeri gelince "../" bazen "../../" kullanıyoruz, işte bu yüzden  İyi Çalışmalar...
|
|
|
|
|
Logged
|
|
|
|
firenkli
Yeni Kullanıcılar
Offline
Mesaj Sayısı: 1
|
burdaki bir kaç kodu denedim. Boş bir sayfa ile karşılaştım... Neden olabilir ?
ikinci olarak apache nin autoindex gibi dizinleri dosyaları gösteren bir index.php yapmak istiyorum. Hazır kod var mı ? birde sıfırdan kodlamak istiyorum, php'nin hangi başlığı/başlıkları altından öğrenip böyle birşey yapabilirim.
Teşekkurler.
|
|
|
|
« Son Düzenleme: 30, 2006, 03:46:16 am Gönderen: firenkli »
|
Logged
|
|
|
|
|
obareey
|
Dizin boş yazısı da mı çıkmıyor? belki diğer kodlarında bi sorun vardır onlara bi daha bak çünkü bende çalışıyor kodlar. ikinci yapmak istediğini anlamadım. dizinleri ve dosyaları otomatik gösterecek? hatta sonra onları yönetecek bi panel? gibi bişeyler mi yapmak istiyosun. biraz daha açarsan daha fazla yardımcı olabiliriz. iyi çalışmalar...
|
|
|
|
|
Logged
|
|
|
|
requiem
PHP Stajyeri

Offline
Mesaj Sayısı: 194
oop rules the world
|
merhabalar,belki şu kod işini görebilir, <?php function tara($dirz){ $sayi=0; $dir=scandir($dirz);
foreach ($dir as $key=>$val) { if($val!="."&&$val!=".."&&is_dir($dirz."/".$val)) { $sayi += tara($dirz."/".$val."/"); } else if(is_file($dirz."/".$val) && !is_dir($dirz."/".$val)) { $sayi++; } } return $sayi; } $toplamDosyaSayisi=tara("."); echo $toplamDosyaSayisi; ?>
"." nokta yerine geçerli bir klasör adı yazmanız yeterli.
|
|
|
|
|
Logged
|
|
|
|
|
 |
|