龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 统计代码行数和过滤注释

时间:2014-07-16 02:58来源:网络整理 作者:网络 点击:
分享到:
统计代码行数和过滤注释 [代码片段(80行)]
#!/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 );
        }
    }
}

?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接