统计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 );
}
}
}
?>