7 ответов:
в операционной системе POSIX (например, Linux или OS X) вы можете записать в свою оболочку Bash следующее:
wc -l `find . -iname "*.php"`это будет считать строки во всех php-файлах в текущем каталоге, а также подкаталогах. (Обратите внимание, что эти одиночные "кавычки" являются обратными, а не фактическими одиночными кавычками)
Я сделал себе небольшой скрипт, чтобы сделать это в одном из моих проектов. Просто используйте следующий код на странице php в корне вашего проекта. Скрипт будет выполнять рекурсивную проверку вложенных папок.
<?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: [email protected] */ $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; }
SLOCCount Это удивительный инструмент, который создает отчет о количестве строк для большого количества языков. Он также идет дальше, создавая другие, связанные статистические данные, такие как ожидаемая стоимость разработчика.
вот пример:
$ 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 = ,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'."
к сожалению, SLOCCount немного длинен в зубе и болит в шее для PHP-проектов, особенно тех, которые имеют вложенный
vendorкаталог, который вы не хотите считать. Кроме того, он выдает предупреждение для каждого файла PHP, который не имеет закрывающего тега (который должен быть всем из них, если вы не смешиваете HTML и PHP).CLOC является более современной альтернативой, которая делает все (edit: почти все) SLOCCount делает, но также поддерживает и это не страдает от вышеупомянутой проблемы с закрытием тега. Он также создает базу данных SQLite, из которой вы можете извлечь некоторые довольно продвинутые метрики.
на windows из командной строки:
findstr /R /N "^" *.php | find /C ":"спасибо в этой статье.
чтобы включить подкаталоги, используйте
\s:findstr /s /R /N "^" *.php | find /C ":"
SLOCs PHP-проекта можно считать с sloccount использовать что-то вроде этого:
find . -not -wholename '*/libraries/*' -not -wholename '*/lib/*' -not -wholename '*/vendor/*' -type f xargs sloccountпример вывода для проекта sizey drupal:
[...] 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 = ,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"`'); ?>просто запустите это в вашем текущем каталоге, где размещены все файлы php, он будет отображать количество строк в браузере.
Comments