统计代码行数与过滤注释的php代码

发布时间:2019-12-19编辑:脚本学堂
如何统计php代码的行数,以及如何过滤掉其中的注释呢?那么本文可以为大家提供一种思路与实现方法。此代码可用于整理代码,以及日常文档的注释提取等。

统计php代码的行数,过滤掉其中的注释。

复制代码 代码示例:

<?php
/// 获取命令行参数
/// by http://www.jb200.com
$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 );
        }
    }
}
?>