利用 PHP 实现精确代码行数统计 - 包含单个文件及整个目录
编辑:本站更新:2024-12-16 04:56:30人气:3668
在开发过程中,对项目源码进行精确的代码行数统计是一项非常实用的任务。PHP作为一种广泛应用且功能强大的服务器端脚本语言,在处理这类任务时也展现出了其灵活性和高效性。以下将详细介绍如何使用PHP实现针对单个文件以及整个目录下的所有文件进行精准的代码行数量统计。
首先,要完成对于单一PHP文件内代码行数的计算相对简单直接:
function countLinesInSingleFile($filePath) {
// 打开并读取文件内容
$file = fopen($filePath, 'r');
if (!$file) return false;
$lineCount = 0;
while (!feof($file)) {
fgets($file);
$lineCount++;
}
fclose($file);
// 这里我们忽略了空行与注释的数量以达到“有效”代码行计数的目的,
// 若需包含这些,则无需任何修改
return $lineCount;
}
// 使用示例:
$singleFilePath = './example.php';
echo "The number of lines in '$singleFilePath' is: ", countLinesInSingleFile($singleFilePath);
然而,当我们需要在整个目录下递归地遍历各个子目录及其内部的所有PHP文件来执行同样的操作时,就需要稍微复杂一些的方法了:
function countLinesRecursively($directoryPath) {
$totalLineCounts = [];
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directoryPath), RecursiveIteratorIterator::SELF_FIRST) as $item) {
if ($item->isDir()) continue; // 跳过非文件
if(pathinfo($item->__toString(), PATHINFO_EXTENSION) === 'php') {
$count = count(file($item));
array_push($totalLineCounts, ['filename' => $item->getRealpath(), 'lines_count' => $count]);
}
}
// 计算总行数
$sumOfAllLines = array_sum(array_column($totalLineCounts, 'lines_count'));
echo "\nThe total number of code lines across all .php files under directory '$directoryPath': {$sumOfAllLines}";
// 返回每个文件的具体统计数据(可选)
return $totalLineCounts;
}
// 示例用法:
$direcotryToScan = '.';
$countResults = countLinesRecursively($direcotryToScan);
上述`countLinesRecursively()`函数借助于PHP内置的RecursiveDirectoryIterator类实现了深度优先搜索算法,并通过检查路径扩展名确保只分析`.php`结尾的文件。最终得到的是一个数组结构,包含了指定目录中每一个PHP文件的实际物理地址与其对应的代码行数目;同时输出了总计的代码行总数。
总之,通过对PHP核心库的良好运用和技术巧妙结合,我们可以轻松应对从单独文件到多层级、大规模项目的全面代码行统计需求,这对于软件质量控制、团队工作量评估甚至维护历史记录等方面都有着重要的价值和实际意义。
首先,要完成对于单一PHP文件内代码行数的计算相对简单直接:
php
function countLinesInSingleFile($filePath) {
// 打开并读取文件内容
$file = fopen($filePath, 'r');
if (!$file) return false;
$lineCount = 0;
while (!feof($file)) {
fgets($file);
$lineCount++;
}
fclose($file);
// 这里我们忽略了空行与注释的数量以达到“有效”代码行计数的目的,
// 若需包含这些,则无需任何修改
return $lineCount;
}
// 使用示例:
$singleFilePath = './example.php';
echo "The number of lines in '$singleFilePath' is: ", countLinesInSingleFile($singleFilePath);
然而,当我们需要在整个目录下递归地遍历各个子目录及其内部的所有PHP文件来执行同样的操作时,就需要稍微复杂一些的方法了:
php
function countLinesRecursively($directoryPath) {
$totalLineCounts = [];
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directoryPath), RecursiveIteratorIterator::SELF_FIRST) as $item) {
if ($item->isDir()) continue; // 跳过非文件
if(pathinfo($item->__toString(), PATHINFO_EXTENSION) === 'php') {
$count = count(file($item));
array_push($totalLineCounts, ['filename' => $item->getRealpath(), 'lines_count' => $count]);
}
}
// 计算总行数
$sumOfAllLines = array_sum(array_column($totalLineCounts, 'lines_count'));
echo "\nThe total number of code lines across all .php files under directory '$directoryPath': {$sumOfAllLines}";
// 返回每个文件的具体统计数据(可选)
return $totalLineCounts;
}
// 示例用法:
$direcotryToScan = '.';
$countResults = countLinesRecursively($direcotryToScan);
上述`countLinesRecursively()`函数借助于PHP内置的RecursiveDirectoryIterator类实现了深度优先搜索算法,并通过检查路径扩展名确保只分析`.php`结尾的文件。最终得到的是一个数组结构,包含了指定目录中每一个PHP文件的实际物理地址与其对应的代码行数目;同时输出了总计的代码行总数。
总之,通过对PHP核心库的良好运用和技术巧妙结合,我们可以轻松应对从单独文件到多层级、大规模项目的全面代码行统计需求,这对于软件质量控制、团队工作量评估甚至维护历史记录等方面都有着重要的价值和实际意义。
www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源
PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。