申请软著或知识产权用的。主要统计代码行数和合并所有代码文件到一个文件,打印前后各30页这个需要自己打开合并后的文件去打印。

<?php

$output = 'print.txt';
$dir = 'app';

$list = scanFiles('app');
$info = mergeFiles($output, $list);
echo '文件总数:' . count($list) . '个' . PHP_EOL;
echo '代码总量:' . $info['content length'] . '字' . PHP_EOL;
echo '代码行数:' . $info['line total'] . '行' . PHP_EOL;

/**
 * 扫描指定目录下的所有文件
 * @param string $path 要扫描的目录
 * @param string $regex 文件名规则(正则)
 * @return array
 */
function scanFiles($path, $regex = '\.(php|html)$')
{
    $list = [];
    foreach (scandir($path) as $item) {
        if ('.' === $item || '..' === $item) continue;
        if (is_dir($path . '/' . $item)) {
            $list = array_merge($list, scanFiles($path . '/' . $item));
        } elseif (is_file($path . '/' . $item)) {
            if (!preg_match('@' . $regex . '@', $item)) continue;
            $list[] = $path . '/' . $item;
        }
    }

    return $list;
}

/**
 * 合并数组中的所有文件
 * @param string $output 合并后的内容的输出路径
 * @param array $list 要合并的文件列表
 * @return array
 */
function mergeFiles($output, $list)
{
    $file = fopen($output, 'w+');
    $length = 0;
    $line = 0;
    foreach ($list as $item) {
        $itemRes = fopen($item, 'r');
        $findEnd = false;
        while(!feof($itemRes))
        {
            $itemLine = fgets($itemRes);
            if ($findEnd) {
                if (false !== strpos($itemLine, '*/')) {
                    $findEnd = false;
                }
                continue;
            }

            if (preg_match('@^\s*//@', $itemLine)) {
                continue;
            } elseif (preg_match('@^\s*$@', $itemLine)) {
                continue;
            } elseif (preg_match('@\s*/\*.*\*/\s*@', $itemLine)) {
                continue;
            } elseif (false !== strpos($itemLine, '/*')) {
                $findEnd = true;
                continue;
            } else {
                $line++;
                $length += fwrite($file, $itemLine);
            }
        }
        fclose($itemRes);
    }
    fclose($file);
    return ['content length' => $length, 'line total' => $line];
}

执行效果

# php print.php
文件总数:317个
代码总量:1808293字
代码行数:41856行

标签: none

添加新评论