Skip to content

Instantly share code, notes, and snippets.

@duyet
Created March 23, 2014 05:12
Show Gist options
  • Save duyet/9719089 to your computer and use it in GitHub Desktop.
Save duyet/9719089 to your computer and use it in GitHub Desktop.
Get line of code for project
<?php
/**
* Pack of ypCore System
* Code by LvDuit
* (c) 2014
* Contact: lvduit08@gmail.com
*/
error_reporting(0);
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", "css", "htm", "ini");
// 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);
}
}
}
?>
<!doctype html>
<HTML>
<HEAD>
<TITLE>Number of line code ypCore</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER><h1 style="font-family: sans-serif;">ypCORE Line Code Couter</h1></CENTER>
<?php
$lineCount = new lineCount();
// If no directory is given, it will use the directory of the script
$lineCount->dir=".";
// 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);
print_r($totals);
?>
</BODY>
</HTML>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment