欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

统计代码行数和过滤注释

程序员文章站 2022-05-19 13:10:25
...
#!/usr/local/bin/php -f
<?php

/// 获取命令行参数
$fileName = $argv[1];
if ( ! is_dir( $fileName ) && ! file_exists( $fileName ) ) {
    
    echo "Usage: ".$argv[0]." [path|file]\n";
    exit;
}


$disableFile = "DMO|test_|FileZip|jpgraph|smarty|tourdata|demo_|Frame|socket.php|IDNA2.php|timezone.php|config.db.php|config.php";
$disableFile .= "|main1.php|obj.php|interface.php|hmac.php|php-excel.class.php|cfg.class.php|global.php|gconfig.php|main2.php|sinfo.php";
$disableFile .= "|main.php|index.php|mod_tpl.php|redis.lua|^_";


$disableDir = "cache$|templates$|templates_c$|adodb$|smarty$|mailer$|biz$|test$";
$ext = "\.php$|\.c$|\.h$|\.go$|\.lua$";

if ( is_dir( $fileName ) ) {
    getDir( $fileName );
} else {
    echoCode( $fileName );
}


function echoCode( $fileName ) {

    $fileLines = file( $fileName );
    $lineCount = 0;
    foreach( $fileLines AS $line ) {
        $line = str_replace( "\t", "    ", $line );
        $tr = trim( $line );
        if ( preg_match( "/\\*|^\*|^ {1,}\*|\/\*|\*\/|^ {1,}\/\/|^\/\//", $line ) || $tr === "" ) {
            continue;
        }
        $lineCount++;
        $line = str_replace( "\r", "", $line );
        $line = str_replace( "\n", "", $line );
        
        echo "".$line."\n";
    }
    echo "\n";
}

function getDir( $path ) {
    global $disableFile, $disableDir, $ext;
    $dDirs = dir( $path );
    while ( false !== ( $fileDirs = $dDirs->read() ) ) { 

        $sCodeFile = $path . "/".$fileDirs;
   
        if ( $fileDirs == "." || $fileDirs == ".."  || preg_match("/".$disableDir."/", $fileDirs ) ) {
            continue;
        }
        
        if ( ! is_dir( $sCodeFile ) && ! file_exists( $sCodeFile ) ) {
            continue;
        }
        if ( preg_match( "/".$disableFile."/", $fileDirs ) || 
            ( ! is_dir( $sCodeFile ) && ! preg_match( "/".$ext."/", $fileDirs ) ) ) {
            continue;
        }

        if ( is_dir( $sCodeFile ) ) {
            getDir( $sCodeFile );
            continue;
        } else {
        
            //echo $sCodeFile."\n";
            echo iconv( "UTF-8", "GBK", "文件名: ").$fileDirs."\n";
            //echo "文件名: ".$fileDirs."\n";
            echoCode( $sCodeFile );
        }
    }
}

?>