Cuente de líneas en un proyecto PHP [cerrado
Pregunta
¿Conoce alguna herramienta que pueda contar todas las líneas de código de un proyecto PHP?
Solución
En un sistema operativo POSIX (por ejemplo, Linux o OS X) puede escribir lo siguiente en su shell bash:
wc -l `find . -iname "*.php"`
Esto contará las líneas en todos los archivos PHP en el directorio actual y también subdirectorios. (Tenga en cuenta que esas 'citas' individuales son backticks, no cotizaciones individuales reales)
Otros consejos
Me hice un pequeño guión para hacer eso en uno de mis proyectos. Simplemente use el siguiente código en una página PHP en la raíz de su proyecto. El script hará una verificación recursiva en las subpoletas.
<?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;
}
Slococcound es una herramienta increíble que produce un informe de conteo de línea para una gran cantidad de idiomas. También va más allá al producir otras estadísticas relacionadas como el costo esperado del desarrollador.
Aquí hay un ejemplo:
$ 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'."
Desafortunadamente, Sloccount es un poco largo en el diente y un dolor en el cuello para los proyectos de PHP, particularmente los que tienen un anidado vendor
Directorio que no desea contar. Además, emite una advertencia para cada archivo de PHP que no tenga una etiqueta de cierre (que debería ser todas si no está mezclando HTML y PHP).
Cloc es una alternativa más moderna que hace todo (editar: casi todo) Sloccount, pero también admite un --exclude-dir
opción y no sufre el problema de la etiqueta cerrada antes mencionado. También emite una base de datos SQLite de la que puede extraer algunas métricas bastante avanzadas.
En Windows desde una línea de comando:
findstr /R /N "^" *.php | find /C ":"
Gracias a Este artículo.
Para incluir sub subvosores, usar \s
:
findstr /s /R /N "^" *.php | find /C ":"
Los SLOC de un proyecto PHP pueden contar con slococcound Usando algo como esto:
find . -not -wholename '*/libraries/*' -not -wholename '*/lib/*' -not -wholename '*/vendor/*' -type f xargs sloccount
Salida de muestra para un proyecto Drupal Sizey:
[...]
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"`');
?>
Simplemente ejecute esto en su directorio actual donde se colocan todos los archivos PHP, mostrará líneas de conteo en el navegador.