Licznik umożliwia pominięcie dowolnych katalogów, a także zliczanie kilku rozszerzeń np. php, css, js (możemy dowolnie je ustawiać). Są one osobno liczone. Możemy obejrzeć wyniki liczby linii kodu dla każdego pliku w katalogu a także zobaczyć całkowitą liczbę linii kodu dla wszystkich typów plików.

Program napisany w PHP.



<?php

/*

<<< Licznik linii kodu w plikach o danym rozszerzeniu >>>
2008 Copyright by Webook.pl

### Wersja: 1.00 / 06.12.2008r.

### Licencja GNU
http://gnu.org.pl/text/licencja-gnu.html

### Jak uruchomić skrypt?
1. Umieść ten plik w katalogu nadrzędnym w stosunku do katalogu który ma zostać przeszukany
2. Podaj w zmiennej $nazwa_katalogu nazwe katalogu ktory bedzie przeszukany
3. Podaj w $nazwa_rozszerzenia nazwe rozszerzenia plikow ktorych linie kodu maja byc zliczone

### Wskazówka:
Jeśli katalog który będzie przeszukiwany zawiera dużo plików skrypt może wykonywać się ponad 30 sekund,
w takim wypadku może zostać zatrzymany przez serwer.
Zmien sobie w pliku php.ini w linii
max_execution_time = 30;
czas 30 sekund na więcej aby skrypt mógł się wykonać do końca.
Zalecam korzystanie ze skryptu na localhost'cie, w końcu to tylko Ciebie interesuje ile linii kodu zaprogramowałeś :)
Nie ma sensu obciążać skryptem serwera hostingowego, no chyba że nie masz na localu plików swojej witryny

*/

$nazwa_katalogu = 'mojkatalog'; // podaj nazwe katalogu w ktorym maja zostac przeszukane pliki o danym rozszerzeniu i zliczone ich linie kodu

$tab_pomin_katalogi[] = 'mojkatalog/pomin_mnie/'; // tworzy tablice z adresami katalogow ktore nalezy pominac podczas liczenia linii kodu

if(IsSet($_GET['katalog'])) {
$nazwa_katalogu = $_GET['katalog'];
}

# start skryptu ---------------------------------------------------------------------------------
#****************
$nazwa_rozszerzenia = 'php'; // TU USTAW ROZSZERZENIE
licznik_linii($nazwa_katalogu.'/', 1);
$all_files = $liczba_plikow_liczonych+$liczba_plikow_pominietych;
echo '<hr>Pominiete pliki:<br /> '.$pominiete_pliki;
echo '<hr> Pliki '.$nazwa_rozszerzenia.' maja lacznie linii kodu: <b>'.$linii_all.'</b>';
echo ' / Plików '.$nazwa_rozszerzenia.': '.$liczba_plikow_liczonych.' / Plików pominietych: '.$liczba_plikow_pominietych.' / Wszystkich plików: '.$all_files.'<hr>';
#****************

#****************
$nazwa_rozszerzenia = 'css'; // TU USTAW ROZSZERZENIE
licznik_linii($nazwa_katalogu.'/', 1);
$all_files = $liczba_plikow_liczonych+$liczba_plikow_pominietych;
echo '<hr>Pominiete pliki:<br /> '.$pominiete_pliki;
echo '<hr> Pliki '.$nazwa_rozszerzenia.' maja lacznie linii kodu: <b>'.$linii_all.'</b>';
echo ' / Plików '.$nazwa_rozszerzenia.': '.$liczba_plikow_liczonych.' / Plików pominietych: '.$liczba_plikow_pominietych.' / Wszystkich plików: '.$all_files.'<hr>';
#****************

#****************
$nazwa_rozszerzenia = 'js'; // TU USTAW ROZSZERZENIE
licznik_linii($nazwa_katalogu.'/', 1);
$all_files = $liczba_plikow_liczonych+$liczba_plikow_pominietych;
echo '<hr>Pominiete pliki:<br /> '.$pominiete_pliki;
echo '<hr> Pliki '.$nazwa_rozszerzenia.' maja lacznie linii kodu: <b>'.$linii_all.'</b>';
echo ' / Plików '.$nazwa_rozszerzenia.': '.$liczba_plikow_liczonych.' / Plików pominietych: '.$liczba_plikow_pominietych.' / Wszystkich plików: '.$all_files.'<hr>';
#****************

echo '<hr> Wszystkich linii w plikach różnych typów: <b>'.$all_lines_in_all_types_of_files.'</b>';

#-------------------------------------------------------------------------------------------------

function licznik_linii($katalog, $reset=0) {
global $tab_pomin_katalogi, $linii_all, $pominiete_pliki, $liczba_plikow_liczonych, $liczba_plikow_pominietych, $nazwa_rozszerzenia, $all_lines_in_all_types_of_files;
static $linii;
if($reset == 1) {
$linii = 0;
$pominiete_pliki = '';
$all_files = $liczba_plikow_liczonych = $liczba_plikow_pominietych = $linii_all = 0;// resetowanie zmiennych globalnych na potrzeby wywolania tego skryptu
}



$dir = new DirectoryIterator($katalog);

while($dir->valid()) {

if(!$dir->isDot()) {

$nazwa_pliku = $katalog.$dir->current();
$nazwa_katalogu = $nazwa_pliku.'/';

if(is_dir($nazwa_katalogu)) { // jesli jest katalogiem to otwórz i czytaj linie w plikach w nim zawartych

if(!in_array($nazwa_katalogu, $tab_pomin_katalogi)) { // pominie przeszukiwanie katalogow podanych w tablicy
licznik_linii($nazwa_katalogu);
}

} else {

// sprawdzenie czy plik ma dane rozeszezenie
$spr_php = strstr($nazwa_pliku, '.'.$nazwa_rozszerzenia);

if($spr_php == '.'.$nazwa_rozszerzenia) {

echo '<b>sciezka:</b> '.$nazwa_pliku.'<br />';
$liczba_linii = count(file($nazwa_pliku));

echo 'linii w pliku: '.$liczba_linii.'<br /><br />';
$linii += $liczba_linii;
$linii_all = $linii;
$all_lines_in_all_types_of_files += $liczba_linii;

$liczba_plikow_liczonych++;

} else {

// nie wyswietlaj pominietych plikow
//$pominiete_pliki .= '<b>sciezka:</b> '.$nazwa_pliku.'<br />';

$liczba_plikow_pominietych++;

}

}


}

$dir->next();
}


}

?>