这个类可以列出文件的详细内容,统计一个目录下总代码行,你可以根据你的需要修改被统计的文件类型。 还可以限制统计类型 var$ext=array(php,phtml,php3,inc,js,html,htm,css,doc); 代码珠玑:http://www.codepearl.com/files/198.html PHP 源码与演示: 源码
这个类可以列出文件的详细内容,统计一个目录下总代码行,你可以根据你的需要修改被统计的文件类型。
源码与演示:源码出处 演示出处
<? //http://www.codepearl.com header("Content-type: text/html; charset=UTF-8"); include("class.lineCount.php"); ?> <HTML> <HEAD> <TITLE>Source Code Count</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <? $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"] ?> </BODY> </HTML>
<? //http://www.codepearl.com 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<count($this->cnt);$i++) { $totalLines += $this->cnt[$i]['count']; if (!(in_array($this->cnt[$i]['dir'],$usedDir))) { if ($output==1) { $listOutput .= " <TR>\n"; $listOutput .= " <TD COLSPAN=\"2\" BGCOLOR=\"#EEEEEE\" WIDTH=\"100%\" ALIGN=\"left\" STYLE=\"border-bottom: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC\"><FONT STYLE=\"font-family: arial; font-size: 9pt\"><B>".iconv("GB2312","UTF-8",$this->cnt[$i]['dir'])."</B></FONT></TD>\n"; $listOutput .= " </TR>\n"; } $usedDir[] = $this->cnt[$i]['dir']; } if ($output==1) { $listOutput .= " <TR>\n"; $listOutput .= " <TD WIDTH=\"80%\" ALIGN=\"left\" STYLE=\"border-bottom: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC\"><FONT STYLE=\"font-family: arial; font-size: 9pt\">".iconv("GB2312","UTF-8",$this->cnt[$i]['file'])."</FONT></TD>\n"; $listOutput .= " <TD WIDTH=\"20%\" ALIGN=\"center\" STYLE=\"border-bottom: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC\"><FONT STYLE=\"font-family: arial; font-size: 9pt\">".number_format($this->cnt[$i]['count'])."</FONT></TD>\n"; $listOutput .= " </TR>\n"; } } $totalFiles = number_format(count($this->cnt)); $totalLines = number_format($totalLines); $totalFolders = number_format(count($usedDir)); if ($output==1) { print "<CENTER>\n"; print "<B><FONT STYLE=\"font-family: arial; font-size: 13pt\">".$this->dir."</B></FONT><BR><BR>\n\n"; print "<TABLE WIDTH=\"85%\" BORDER=\"0\" CELLPADDING=\"10\" CELLSPACING=\"0\">\n"; print " <TR>\n"; print " <TD WIDTH=\"10%\" ALIGN=\"left\"><FONT STYLE=\"font-family: arial; font-size: 11pt\"><B>简述:</B> ".$totalFolders."文件夹, ".$totalFiles."文件, ".$totalLines." 行代码</FONT></TD>\n"; print " </TR>\n"; print "</TABLE>\n"; print "<TABLE WIDTH=\"85%\" CELLPADDING=\"6\" CELLSPACING=\"1\" STYLE=\"border-top: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC\">\n"; print " <TR>\n"; print " <TD WIDTH=\"80%\" ALIGN=\"left\" BGCOLOR=\"#4C6177\" STYLE=\"border-bottom: 1px solid #182C41; border-right: 1px solid #182C41\"><FONT STYLE=\"font-family: arial; font-size: 11pt; color: #FFFFFF\"><B>文件名/目录</B></FONT></TD>\n"; print " <TD WIDTH=\"20%\" ALIGN=\"center\" BGCOLOR=\"#4C6177\" STYLE=\"border-bottom: 1px solid #182C41; border-right: 1px solid #182C41\"><FONT STYLE=\"font-family: arial; font-size: 11pt; color: #FFFFFF\"><B>代码行数</B></FONT></TD>\n"; print " </TR>\n"; print $listOutput; print "</TABLE>\n"; print "<TABLE WIDTH=\"85%\" BORDER=\"0\" CELLPADDING=\"10\" CELLSPACING=\"0\">\n"; print " <TR>\n"; print " <TD WIDTH=\"10%\" ALIGN=\"left\"><FONT STYLE=\"font-family: arial; font-size: 11pt\"><B>简述:</B> ".$totalFolders."文件夹, ".$totalFiles."文件, ".$totalLines."行代码</FONT></TD>\n"; print " </TR>\n"; print "</TABLE>\n"; print "</CENTER>\n"; } else { return array("files"=>$totalFiles,"lines"=>$totalLines,"folders"=>$totalFolders); } } } ?>