统计代码行数和过滤注释
程序员文章站
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 ); } } } ?>