2. [代码]demo
//
header("Content-type: text/html; charset=UTF-8");
include("class.lineCount.php");
?>
Source Code Count
$lineCount = new lineCount;
// If no directory is given, it will use the directory of the script
$lineCount->dir="../linecount";
// Use this method to output the summary and list of files to the page
// You can customize the HTML from within the class
$lineCount->summary(1);
// Use this method to get the totals as an associative array:
$totals = $lineCount->summary(0);
# echo $totals["folders"] / $totals["files"] / $totals["lines"]
?>
3. [代码]操作类
//
header("Content-type: text/html; charset=UTF-8");
class lineCount {
// Don't modify these
var $x = 0;
var $cnt = array();
// Files to include in the count
var $ext = array("php","phtml","php3","inc","js","html","htm","css","doc");
// If no directory is set, the directory of the script will be used
var $dir = "";
function countLines($dir) {
if (is_dir($dir)) {
$dir=iconv("gb2312","GBK",$dir);
if ($handle = opendir($dir)) {
// Loop through files
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$filePath = $dir."/".$file;
if (is_dir($filePath)) {
// Item is another folder, call the function again
$this->countLines($filePath);
} else {
// Item is a file, get some info about it
$fileName = explode("/",$filePath);
$fileDir = $fileName[(count($fileName)-2)];
$fileName = $fileName[(count($fileName)-1)];
$fileExt = explode(".",$fileName);
$fileExt = $fileExt[(count($fileExt)-1)];
if (in_array($fileExt,$this->ext)) {
// Open the file, get line count
$fp = fopen($filePath, "r");
$buffer = rawurlencode(fread($fp, filesize($filePath)));
$buffer = explode("%0A", $buffer);
$numLines = count($buffer);
fclose($fp);
// Add the information to our count array
$this->cnt[$this->x]['dir'] = $dir;
$this->cnt[$this->x]['file'] = $fileName;
$this->cnt[$this->x]['count'] = $numLines;
$this->x++;
}
}
}
}
closedir($handle);
} else {
return false;
}
} else {
return false;
}
}
function summary($output=1) {
// $output
// 1 to generate a summary and file list
// 0 to get an associative array with the totals
if (!(is_dir($this->dir))) {
// No directory given, use document root
$this->dir = $_SERVER['DOCUMENT_ROOT'];
}
$this->countLines($this->dir);
$listOutput = "";
$totalLines = 0;
$usedDir = array();
for ($i=0;$i
cnt);$i++) {
$totalLines += $this->cnt[$i]['count'];
if (!(in_array($this->cnt[$i]['dir'],$usedDir))) {
if ($output==1) {
$listOutput .= " \n";
$listOutput .= " ".iconv("GB2312","UTF-8",$this->cnt[$i]['dir'])." | \n";
$listOutput .= "
\n";
}
$usedDir[] = $this->cnt[$i]['dir'];
}
if ($output==1) {
$listOutput .= " \n";
$listOutput .= " ".iconv("GB2312","UTF-8",$this->cnt[$i]['file'])." | \n";
$listOutput .= " ".number_format($this->cnt[$i]['count'])." | \n";
$listOutput .= "
\n";
}
}
$totalFiles = number_format(count($this->cnt));
$totalLines = number_format($totalLines);
$totalFolders = number_format(count($usedDir));
if ($output==1) {
print "\n";
print "".$this->dir."
\n\n";
print "\n";
print " \n";
print " 简述: ".$totalFolders."文件夹, ".$totalFiles."文件, ".$totalLines." 行代码 | \n";
print "
\n";
print "
\n";
print "\n";
print " \n";
print " 文件名/目录 | \n";
print " 代码行数 | \n";
print "
\n";
print $listOutput;
print "
\n";
print "\n";
print " \n";
print " 简述: ".$totalFolders."文件夹, ".$totalFiles."文件, ".$totalLines."行代码 | \n";
print "
\n";
print "
\n";
print "\n";
} else {
return array("files"=>$totalFiles,"lines"=>$totalLines,"folders"=>$totalFolders);
}
}
}
?>