bir PHP projesinde satırları saymak

9 Cevap php

Ben sadece merak ediyorum. Eğer bir PHP projesinde tüm kod satırları sayabilir herhangi bir araç biliyor musunuz?

Birçok thx!

9 Cevap

Bir POSIX işletim sistemi (örneğin Linux veya OS X) Eğer Bash kabuğu içine aşağıdaki yazabilirsiniz:

wc -l `find . -iname "*.php"`

Bu geçerli dizindeki tüm php dosyaları çizgiler ve aynı zamanda alt dizinleri sayacaktır. (Bu 'tek tırnak' backticks değil gerçek tek tırnak olduğunu unutmayın)

SLOCCount dillerde çok sayıda satır sayımı rapor üreten harika bir araçtır. Ayrıca bu tür beklendiği geliştirici maliyet gibi, ilgili istatistikleri üreterek ileri gider.

İşte bir örnek:

$ sloccount .
Creating filelist for experimental
Creating filelist for prototype
Categorizing files.
Finding a working MD5 command....
Found a working MD5 command.
Computing results.


SLOC    Directory	SLOC-by-Language (Sorted)
10965   experimental    cpp=5116,ansic=4976,python=873
832     prototype       cpp=518,tcl=314


Totals grouped by language (dominant language first):
cpp:           5634 (47.76%)
ansic:         4976 (42.18%)
python:         873 (7.40%)
tcl:            314 (2.66%)




Total Physical Source Lines of Code (SLOC)                = 11,797
Development Effort Estimate, Person-Years (Person-Months) = 2.67 (32.03)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 0.78 (9.33)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 3.43
Total Estimated Cost to Develop                           = $ 360,580
 (average salary = $56,286/year, overhead = 2.40).
SLOCCount, Copyright (C) 2001-2004 David A. Wheeler
SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.
SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to
redistribute it under certain conditions as specified by the GNU GPL license;
see the documentation for details.
Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."

Ne yazık ki, SLOCCount PHP projeleri, sen sayılır istemediğiniz bir iç içe vendor dizin var, özellikle olanlar için diş ve boynunda bir ağrı biraz uzun. Ayrıca, bir kapanış etiketi (HTML ve PHP karıştırma değilse hepsi olmalı) yok her PHP dosyası için bir uyarı verir.

SLOCCount yapar, ama aynı zamanda bir --exclude-dir seçeneğini destekler ve yukarıda belirtilen yakın etiket sorunu muzdarip değil: CLOC şeyi (hemen hemen her şeyi edit) yapar daha modern bir alternatiftir. Ayrıca bazı oldukça gelişmiş ölçümleri ayıklamak bir SQLite veritabanı yayar.

Ben kendimi projelerinden biri yapmak için küçük bir betik yaptı. Sadece projenin kökünde bir php sayfada aşağıdaki kodu kullanabilirsiniz. Komut alt klasörleri özyinelemeli kontrol yapacağız.

<?php
/**
 * A very simple stats counter for all kind of stats about a development folder
 * 
 * @author Joel Lord
 * @copyright Engrenage (www.engrenage.biz)
 * 
 * For more information: joel@engrenage.biz

 */


$fileCounter = array();
$totalLines = countLines('.', $fileCounter); 
echo $totalLines." lines in the current folder<br>";
echo $totalLines - $fileCounter['gen']['commentedLines'] - $fileCounter['gen']['blankLines'] ." actual lines of code (not a comment or blank line)<br><br>";

foreach($fileCounter['gen'] as $key=>$val) {
    echo ucfirst($key).":".$val."<br>";
}

echo "<br>";

foreach($fileCounter as $key=>$val) {
    if(!is_array($val)) echo strtoupper($key).":".$val." file(s)<br>";
}




function countLines($dir, &$fileCounter) {
    $_allowedFileTypes = "(html|htm|phtml|php|js|css|ini)";
    $lineCounter = 0;
    $dirHandle = opendir($dir);
    $path = realpath($dir);
    $nextLineIsComment = false;

    if($dirHandle) {
        while(false !== ($file = readdir($dirHandle))) {
            if(is_dir($path."/".$file) && ($file !== '.' && $file !== '..')) {
                $lineCounter += countLines($path."/".$file, $fileCounter);
            } elseif($file !== '.' && $file !== '..') {
                //Check if we have a valid file 
                $ext = _findExtension($file);
                if(preg_match("/".$_allowedFileTypes."$/i", $ext)) {
                    $realFile = realpath($path)."/".$file;
                    $fileHandle = fopen($realFile, 'r');
                    $fileArray = file($realFile);
                    //Check content of file:
                    for($i=0; $i<count($fileArray); $i++) {
                        if($nextLineIsComment) {
                            $fileCounter['gen']['commentedLines']++;
                            //Look for the end of the comment block
                            if(strpos($fileArray[$i], '*/')) {
                                $nextLineIsComment = false;
                            }
                        } else {
                            //Look for a function
                            if(strpos($fileArray[$i], 'function')) {
                                $fileCounter['gen']['functions']++;
                            }
                            //Look for a commented line
                            if(strpos($fileArray[$i], '//')) {
                                $fileCounter['gen']['commentedLines']++;
                            }
                            //Look for a class
                            if(substr(trim($fileArray[$i]), 0, 5) == 'class') {
                                $fileCounter['gen']['classes']++;
                            }
                            //Look for a comment block
                            if(strpos($fileArray[$i], '/*')) {
                                $nextLineIsComment = true;
                                $fileCounter['gen']['commentedLines']++;
                                $fileCounter['gen']['commentBlocks']++;
                            }
                            //Look for a blank line
                            if(trim($fileArray[$i]) == '') {
                                $fileCounter['gen']['blankLines']++;
                            }
                        }

                    }
                    $lineCounter += count($fileArray);
                }
                //Add to the files counter
                $fileCounter['gen']['totalFiles']++;
                $fileCounter[strtolower($ext)]++;
            }
        }
    } else echo 'Could not enter folder';

    return $lineCounter;
}

function _findExtension($filename) {
    $filename = strtolower($filename) ; 
    $exts = split("[/\\.]", $filename) ; 
    $n = count($exts)-1; 
    $exts = $exts[$n]; 
    return $exts;  
}

PHP-proje SLOCs sloccount Böyle bir şey kullanarak sayılır yapabilirsiniz:

find . -not -wholename '*/libraries/*' -not -wholename '*/lib/*' -not -wholename '*/vendor/*' -type f xargs sloccount

Bir sizeY drupal projesi için örnek çıktı:

[...]
SLOC    Directory   SLOC-by-Language (Sorted)
44892   top_dir         pascal=33176,php=10293,sh=1423


Totals grouped by language (dominant language first):
pascal:       33176 (73.90%)
php:          10293 (22.93%)
sh:            1423 (3.17%)

Total Physical Source Lines of Code (SLOC)                = 44,892
Development Effort Estimate, Person-Years (Person-Months) = 10.86 (130.31)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 1.33 (15.91)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 8.19
Total Estimated Cost to Develop                           = $ 1,466,963
 (average salary = $56,286/year, overhead = 2.40).
SLOCCount, Copyright (C) 2001-2004 David A. Wheeler
SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.
SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to
redistribute it under certain conditions as specified by the GNU GPL license;
see the documentation for details.
Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."
<?php
passthru('wc -l `find . -iname "*.php"`');
?>

Sadece tüm php dosyaları yerleştirilir geçerli dizinde bu koşmak, bu tarayıcıda sayısı satırları gösterecektir.

Mercurial projelerde kod satırları sayar cıva uzantısı yok.

http://mercurial.selenic.com/wiki/ClocExtension

Komut satırından pencereler:

findstr /R /N "^" *.php | find /C ":"

Sayesinde this article.

Bu soruya herhangi bir cemaat yeri, phploc bunu yapar ve saygın Sebastian Bergman tarafından yazılmıştır.