Location: PHPKode > scripts > LineCount > linecount/class.lineCount.php
<?
#----------------------------------------------------------------------#
#                                                                      #
#   TITLE:  LineCount v1.0                                             #
#  AUTHOR:  Jake Malone                                                #
#                                                                      #
#     This class will calculate the total number of lines of all       #
#     files in a directory and it's subdirectory. Limit file checking  #
#     by adding the desired file extensions to the array below.        #
#                                                                      #
#     Questions/Comments: hide@address.com                     #
#                                                                      #
#----------------------------------------------------------------------#


	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");


		// If no directory is set, the directory of the script will be used

			var $dir = "";




		function countLines($dir) {

			if (is_dir($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>".$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\">".$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>Summary:</B> ".$totalFolders." folder(s), ".$totalFiles." file(s), ".$totalLines." lines of code</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>Filename</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>Lines</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>Summary:</B> ".$totalFolders." folder(s), ".$totalFiles." file(s), ".$totalLines." lines of code</FONT></TD>\n";
				print "	</TR>\n";
				print "</TABLE>\n";
				print "</CENTER>\n";

			} else {

				return array("files"=>$totalFiles,"lines"=>$lines,"folders"=>$totalFolders); 

			}

		}


	}

?>
Return current item: LineCount