Geliştirmekte ve geliştirmekten sıkılmakta olduğum bir projenin dosyaları epeyce artmıştı. Bir gün merak ettim, kaç satır yazmışımdır acaba diye…
Hergün istekler, hergün artan ihtiyaçlar, “aa şu da olabilir mi?”, “aa şu özelliği de ekleyebilir miyiz?” diye diye incecik bir saç teli sağlamından bir peruğa dönüştü (Perulular böyle der :P).
Bir sayayım dedim ama çok fazla dosya var. Bunun için “code metrics” araçları var. Ama onları da okuyup anlayana kadar oturur kendi işimi kendim yaparım dedim.
Deneyin Amacı: Bir klasördeki dosyaların kaç satırdan oluştuklarını öğrenmek.
Araçlar: Bir adet web tarayıcısı (Elbette Firefox veya Brave), Windows kullanıcıları için XAMPP Server, Bir adet NotePad++
Deney düzeneğinin hazırlanması:
1. Öncelikle proje klasörünün yolunun tanımlanması lazım.
$yolBu = "D:\\Projeler\\BitmeyenSarki";
\\ yazmamın sebebini biliyorsunuz zaten ama bilmeyen de olabilir. O da öğrensin. (http://www.php.net/manual/tr/language.types.string.php)
2. Projenizdeki uzantıları belirlemeniz gerekiyor.
/*buraya, uygun şekilde, istediğiniz uzantıları ekleyebilirsiniz.*/
$uzantilarBunlar = array('php', 'css', 'html', 'json', 'js');
3. İsteğe bağlı olarak belki toplam satır sayısını öğrenmek isteyebilirsiniz:
$toplamSatir = 0;
4. Gelelim işlemi yapan fonksiyonu yazmaya:
$sonuclar = satirSay($yolBu, $uzantilarBunlar);
Bu kadar… Şaka şaka… Devam ediyoruz. Şimdi fonksiyon çağrısını oluşturduk ama çağırdığımız fonksiyon yok ortada. O zaman buyurun yazalım:
5. Fonksiyonun adı satirSay. Sayacağı satırlar nerede? Dosyalarda. Hangi klasörde? $yolBu ile belirtilen değişkenin gösterdiği yerde. Hangi dosyalar? Uzantıları $uzantilar
Bunlar dizisinin elemanları olan dosyalar.
Yeterince soru-cevap yaptıktan sonra faaliyete geçelim:
6. Fonksiyonu çağırdığımız yapıya uygun şekilde tanımlayalım:
function satirSay($yol, $uzantilar) { }
$yol $yolBu değişkenini karşılayacak. $uzantilar da $uzantilarBunlar değişkenini karşılayacak.
function satirSay($yol, $uzantilar)
{
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($yol));
//$rii ile belirtilen yoldaki klasörlerin isimlerini kaydeden bir dizidir.
//Bu sayede, acaba iç içe kaç klasör var, uğraşmıyoruz.
$dosyalar = array();
//dosya isimlerini ve satır sayılarını bu dizi içinde tutacağız.
//başlıyoruz... Her bir klasördeki her bir dosya için aşağıdaki işlemleri tekrarlatıyoruz.
foreach ($rii as $dosya)
{
if ($dosya->isDir())
{
//Eğer dosya bir klasör ise geçelim
continue;
}
$parcala = explode('.', $dosya->getFilename()); //Dosya ismini her . karakterinden parçalıyoruz.
$uzanti = end($parcala); //dosya uzantısını elde ediyoruz.
if (in_array($uzanti, $uzantilar))
{
//Eğer dosyanın uzantısı belirtien uzantılardan bir tanesiyle aynı ise
$dosyalar[$dosya->getPathname()] = count(file($dosya->getPathname()));
//$dosyalar dizisine o dosyanın yolunu anahtar(key), satır sayısını da değer (value) olarak kaydediyoruz.
}
}
return $dosyalar;
//İşlem bittikten sonra fonksiyonun çağrıldığı satıra sonuçları geri döndürüyoruz.
}
7. Küme parantezlerinin içine gereken kodları yazalım. Burada ihtiyacımız olan bir sınıf var ki işleri çok çok kısaltıyor: Iterator sınıfı. Fonksiyonu baştan yazalım.
İşlem bitti mi? Tabii ki hayır! Zira bilgileri elde ettik ama şu an elimizde ne var onu bilmiyoruz.
Bunun için küçük bir döngüde dosya isimlerini ve satır sayılarını ekrana yazdırabiliriz.
foreach ($sonuclar as $key => $value)
{
echo $key . ": " . $value . "
";
$toplamSatir += $value;
}
Belki toplam kaç satırdan oluştuğu da ilgimizi çekebilir.
echo 'Projeniz, toplam ' . $toplamSatir . ' satırdan oluşmaktadır.';
Sonuçlar ekranda şu şekilde görünecektir.
D:\Projeler\BitmeyenSarki\config.json: 69
D:\Projeler\BitmeyenSarki\form.html: 137
D:\Projeler\BitmeyenSarki\index.php: 35
D:\Projeler\BitmeyenSarki\script.js: 139
D:\Projeler\BitmeyenSarki\style.css: 409
Projeniz, toplam 789 satırdan oluşmaktadır.
Bu kadar.