PHP-如何计算应用程序中的代码行数
我需要计算我的应用程序中的代码行数(用PHP,而不是命令行),由于web上的代码片段没有太大帮助,我决定在这里询问。 谢谢你的回复 编辑PHP-如何计算应用程序中的代码行数,php,code-snippets,Php,Code Snippets,我需要计算我的应用程序中的代码行数(用PHP,而不是命令行),由于web上的代码片段没有太大帮助,我决定在这里询问。 谢谢你的回复 编辑 实际上,我需要整个片段来扫描和计算给定文件夹中的行数。我在CakePHP中使用此方法,因此我希望无缝集成。您可以使用文件函数读取文件,然后计数: $c = count(file('filename.php')); 您可以使用文件功能读取文件,然后计数: $c = count(file('filename.php')); 有点脏,但您也可以使用system/
实际上,我需要整个片段来扫描和计算给定文件夹中的行数。我在CakePHP中使用此方法,因此我希望无缝集成。您可以使用
文件
函数读取文件,然后计数
:
$c = count(file('filename.php'));
您可以使用
文件
功能读取文件,然后计数
:
$c = count(file('filename.php'));
有点脏,但您也可以使用system/exec/passthru
wc-l*
有点脏,但您也可以使用system/exec/passthruwc-l*
PHP类有一个很好的类用于计算目录中PHP文件的行数:
您可以在类的顶部指定要检查的文件类型。PHP类有一个很好的类,用于计算目录中PHP文件的行数: $fp = "file.php"; $lines = file($fp); echo count($lines); 可以在类的顶部指定要检查的文件类型 $fp = "file.php"; $lines = file($fp); echo count($lines); $fp=“file.php”; $lines=文件($fp); 回波计数(行); $fp=“file.php”; $lines=文件($fp); 回波计数(行);
要在目录上执行此操作,我将使用迭代器
function countLines($path, $extensions = array('php')) {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path)
);
$files = array();
foreach ($it as $file) {
if ($file->isDir() || $file->isDot()) {
continue;
}
$parts = explode('.', $file->getFilename());
$extension = end($parts);
if (in_array($extension, $extensions)) {
$files[$file->getPathname()] = count(file($file->getPathname()));
}
}
return $files;
}
它将返回一个数组,每个文件作为键,行数作为值。然后,如果您只需要一个总数,只需执行
array_sum(countLines($path))代码>..要在目录上执行此操作,我将使用迭代器
function countLines($path, $extensions = array('php')) {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path)
);
$files = array();
foreach ($it as $file) {
if ($file->isDir() || $file->isDot()) {
continue;
}
$parts = explode('.', $file->getFilename());
$extension = end($parts);
if (in_array($extension, $extensions)) {
$files[$file->getPathname()] = count(file($file->getPathname()));
}
}
return $files;
}
它将返回一个数组,每个文件作为键,行数作为值。然后,如果您只需要一个总数,只需执行array_sum(countLines($path))代码>..使用ircmaxell的代码,我用它制作了一个简单的类,它现在对我来说非常有用
<?php
class Line_Counter
{
private $filepath;
private $files = array();
public function __construct($filepath)
{
$this->filepath = $filepath;
}
public function countLines($extensions = array('php'))
{
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->filepath));
foreach ($it as $file)
{
// if ($file->isDir() || $file->isDot())
if ($file->isDir() )
{
continue;
}
$parts = explode('.', $file->getFilename());
$extension = end($parts);
if (in_array($extension, $extensions))
{
$files[$file->getPathname()] = count(file($file->getPathname()));
}
}
return $files;
}
public function showLines()
{
echo '<pre>';
print_r($this->countLines());
echo '</pre>';
}
public function totalLines()
{
return array_sum($this->countLines());
}
}
// Get all files with line count for each into an array
$loc = new Line_Counter('E:\Server\htdocs\myframework');
$loc->showLines();
echo '<br><br> Total Lines of code: ';
echo $loc->totalLines();
?>
使用ircmaxell的代码,我用它制作了一个简单的类,现在对我来说非常有用
<?php
class Line_Counter
{
private $filepath;
private $files = array();
public function __construct($filepath)
{
$this->filepath = $filepath;
}
public function countLines($extensions = array('php'))
{
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->filepath));
foreach ($it as $file)
{
// if ($file->isDir() || $file->isDot())
if ($file->isDir() )
{
continue;
}
$parts = explode('.', $file->getFilename());
$extension = end($parts);
if (in_array($extension, $extensions))
{
$files[$file->getPathname()] = count(file($file->getPathname()));
}
}
return $files;
}
public function showLines()
{
echo '<pre>';
print_r($this->countLines());
echo '</pre>';
}
public function totalLines()
{
return array_sum($this->countLines());
}
}
// Get all files with line count for each into an array
$loc = new Line_Counter('E:\Server\htdocs\myframework');
$loc->showLines();
echo '<br><br> Total Lines of code: ';
echo $loc->totalLines();
?>
您想要实际的代码行吗?包括/不包括评论?公司/交易所空白?Inc/Exc多行字符串?对于源代码,“行”有许多不同的定义。所有行,无论它们包含代码、注释还是空白。是否要实际的代码行?包括/不包括评论?公司/交易所空白?Inc/Exc多行字符串?对于源代码,“行”有很多不同的定义。所有行,无论是包含代码、注释还是空白。我编辑了这个问题,因为它不太清楚:)我编辑了这个问题,因为它不太清楚:)我提到我需要一个PHP代码段,而不是命令行输入。很抱歉我提到我需要一个PHP代码段,而不是命令行输入。很抱歉感谢您的建议,但由于我正在将其集成到CakePHP中,因此如果我不导入单独的类来实现这一点,则更为合适:)您可以随时查看代码并实现所需的部分,它非常小:-)感谢您的建议,但由于我正在将其集成到CakePHP中,如果我不导入一个单独的类来实现这一点,那就更合适了:)您可以随时查看代码并实现所需的部分,它非常小:-)我需要将它与CakePHP更容易地集成:)然后你可以查看代码并集成它。我需要将它与CakePHP更容易地集成:)然后你可以查看代码并集成它。我编辑了这个问题,因为它不太清楚:)我编辑了这个问题,因为它不太清楚:)谢谢你的回答。我不太了解RecursiveIteratorIterator类的功能,也不太了解它是否可以替换为可以轻松与CakePHP集成的类(正如我在问题中提到的,我希望在我的应用程序中不包含任何其他“外部”类)。“外部”类是PHP本身的一部分。至于与Cake的集成,最简单的方法莫过于复制粘贴该函数。@linkyndy:recursiveIteratoryIterator
和RecursiveDirectoryIterator
都是因为PHP5.0.0
。没有必要包括任何外国课程。只要复制并通过上面的代码,它将适用于任何框架(因为它只是原始PHP)…哦,我不知道:)感谢您的解决方案!我得到以下错误:致命错误:调用
中未定义的方法SplFileInfo::isDot()-为什么???感谢您的回答。我不太了解RecursiveIteratorIterator类的功能,也不太了解它是否可以替换为可以轻松与CakePHP集成的类(正如我在问题中提到的,我希望在我的应用程序中不包含任何其他“外部”类)。“外部”类是PHP本身的一部分。至于与Cake的集成,最简单的方法莫过于复制粘贴该函数。@linkyndy:recursiveIteratoryIterator
和RecursiveDirectoryIterator
都是因为PHP5.0.0
。没有必要包括任何外国课程。只要复制并通过上面的代码,它将适用于任何框架(因为它只是原始PHP)…哦,我不知道:)感谢您的解决方案!我得到以下错误:致命错误:调用中未定义的方法SplFileInfo::isDot()-为什么???同意,感谢分享!同意,谢谢分享!