Statistiques de votre projet (nombre de dossiers, fichiers, lignes...)

Description

Script permettant de compter le nombre de ligne de votre site.
      • Comment ça marche ?

Lors du chargement du fichier, vous allez voir un premier tableau. Dans celui-ci vous devez choisir entre "Include" et "Exclude". Ceci incluera ou excluera les extensions sélectionnées ci-dessous.
Les extensions présentent sont celles préalablement scannées.
Vous verrez ensuite dans le deuxième tableau les détails du dossier que vous avez choisis.
Vous verrez les statistiques suivantes :
- Nombre de dossiers
- Nombre de fichiers inclus et exclus
- Nombre de lignes de code, vide, de commentaire, total des 3
- Taille totale des fichiers inclus
      • Ce que vous devez modifier

Simplement dans le fichier la variable
$directory_start qui pointe vers le dossier ou commencer le scan

Source / Exemple :


<?php
//////////////////////////////////////////////////////////////////////
// stats.php
//--------------------------------------------------------------------
//
// Statistics for your webserver
//
//--------------------------------------------------------------------
// Revision History
// V1.00	1 jan	2004	Jean-Sebastien Goupil
//--------------------------------------------------------------------
// Copyright (C) Jean-Sebastien Goupil
// http://other.lookstrike.com/
//--------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////

######################################################################
### MODIFY
######################################################################
$directory_start = $_SERVER['DOCUMENT_ROOT'];

######################################################################
### STOP MODIFY
######################################################################
/////////////////////////////////////////////////////////////////
// Variable Declaration
/////////////////////////////////////////////////////////////////
$all_extensions = array();
$unite_spec = array("bytes","KB","MB","GB","TB");
$count_val = array(
	0,		// Comment
	0,		// Line
	0,		// White Line
	0,		// Count Dir
	0,		// Excluded Files
	0,		// Included Files
	0		// Size
);
$start_comment=false;

/////////////////////////////////////////////////////////////////
// Function Declaration
/////////////////////////////////////////////////////////////////
/**

  • Lit toutes les extensions présentes dans $directory et les
  • enregistre dans $all_extensions (anti-doublon)
*
  • @param string $directory
  • @param string[] $all_extensions
  • /
function checkextension($directory, &$all_extensions){ if (($handle = @opendir($directory))!==false) { while (($file = readdir($handle))!==false) { if((is_dir($directory.'/'.$file))&&($file != '.' && $file != '..')){ checkextension($directory.'/'.$file, $all_extensions); } elseif($file != '.' && $file != '..'){ $extension=explode('.',$file); // Si le fichier n'a pas de point, on ne le met pas ! $check = ((strpos($file,'.')===false)?'':'.').$extension[count($extension)-1]; if(!in_array($check,$all_extensions)) $all_extensions[] = $check; } } closedir($handle); } } /**
  • Permet d'afficher dans la bonne unitée les octets passé
  • en paramètre.
*
  • @param int $octet
  • @return string
  • /
function unite($octet){ global $unite_spec; $count=0; while($octet>=1024){ $count++; $octet/=1024; } return($octet.' '.$unite_spec[$count]); } /**
  • Vérifie ce que contient $ligne
  • Permet de vérifier si le commentaire est déjà commencé avec /* ($start_comment)
  • Retourne
  • - 0 : Commentaire
  • - 1 : Ligne
  • - 2 : Ligne Vide
*
  • @param string $ligne
  • @return int
  • /
function checkline($ligne){ global $start_comment; $ligne = trim($ligne); if((substr($ligne,0,2)=='/*')&&(substr($ligne,strlen($ligne)-2)=='*/'))return 0; elseif((substr($ligne,0,2)=='/*')&&($start_comment==false)){$start_comment=true;return 0;} elseif((substr($ligne,0,2)=='*/')&&($start_comment==true)){$start_comment=false;return 0;} elseif((substr($ligne,strlen($ligne)-2,2)=='*/')&&($start_comment==true)){$start_comment=false;return 0;} elseif(substr($ligne,0,2)=='//')return 0; elseif(substr($ligne,0,1)=='#')return 0; elseif($start_comment==true)return 0; elseif($ligne=='')return 2; else return 1; } /**
  • Scan le $directory et enregistre les statistiques
*
  • @param string $directory
  • /
function readdirectory($directory){ global $only_exclude,$extension_to_exclude,$extension_to_include,$count_val,$start_comment; if (($handle = opendir($directory))!==false) { while (($file = readdir($handle))!==false) { if((is_dir($directory.'/'.$file))&&($file != '.' && $file != '..')){ $count_val[3]++; // Dir ++ readdirectory($directory.'/'.$file); } elseif($file != '.' && $file != '..'){ $extension=explode('.',$file); $check = ((strpos($file,'.')===false)?'':'.').$extension[count($extension)-1]; if($only_exclude==true && in_array($check,$extension_to_exclude)){ $count_val[4]++; // Excluded File ++ } else{ if($only_exclude==false && !in_array($check,$extension_to_include)) $count_val[4]++; // Excluded File ++ else{ // We don't count THIS file ! if(($directory.'/'.$file)!=($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'])){ $count_val[5]++; // Included File ++ $count_val[6]+=filesize($directory.'/'.$file); // Size $fp = fopen($directory.'/'.$file,'r'); while(!feof($fp)){ $buffer = fgets($fp,255); $count_val[checkline($buffer)]++; } // Lorsqu'un fichier est terminé, on remet le $start_comment à false $start_comment=false; } } } } } closedir($handle); } } ///////////////////////////////////////////////////////////////// // Program Starts ///////////////////////////////////////////////////////////////// checkextension($directory_start, $all_extensions); $choice = (isset($_POST['choice']))?$_POST['choice']:1; echo '<html> <head><title>Stats File</title></head> <body bgcolor="#ffffff">'; echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post"> <table width="550" border="1" align="center"> <tr><th colspan="2">Browsing Files</th></tr> <tr><td>Search</td><td> <input type="radio" name="choice" value="1" id="radio1"';if($choice==1)echo' checked="checked"';echo' /> <label for="radio1">Include</label><br /> <input type="radio" name="choice" value="2" id="radio2"';if($choice==2)echo' checked="checked"';echo' /> <label for="radio2">Exclude</label> </td></tr> <tr><td>Extension</td><td>'; for($i=0;$i<count($all_extensions);$i++){ echo '<input type="checkbox" name="extension['.$i.']" value="1" id="choice'.$i.'"'; if(isset($_POST['extension'][$i]) && $_POST['extension'][$i]==true) echo ' checked="checked"'; echo' /> <label for="choice'.$i.'">'.$all_extensions[$i].'</label><br />'; } echo '</td></tr> <tr><td colspan="2" align="center"><input type="submit" value="Search" /></td></tr> </table> </form>'; $extension_to_exclude = array(); $extension_to_include = array(); if($choice==2){ $only_exclude = true; $compteur=0; for($i=0;$i<count($all_extensions);$i++) if(isset($_POST['extension'][$i]) && $_POST['extension'][$i]==true) $extension_to_exclude[$compteur++] = $all_extensions[$i]; } else{ $only_exclude = false; $compteur=0; for($i=0;$i<count($all_extensions);$i++) if(isset($_POST['extension'][$i]) && $_POST['extension'][$i]==true) $extension_to_include[$compteur++] = $all_extensions[$i]; } readdirectory($directory_start); $count_total = $count_val[0]+$count_val[1]+$count_val[2]; echo '<table width="550" border="1" align="center"><tr><td> <ul>Details <b>'.$directory_start.'</b><br />'; if($only_exclude==true){ echo '<i>(The files with extension'; for($i=0;$i<count($extension_to_exclude);$i++) echo ' '.$extension_to_exclude[$i].','; if(count($extension_to_exclude)==0) echo ' <u>NONE</u>'; echo ' has not been counted.)</i>'; } else{ echo '<i>(ONLY The files with extension'; for($i=0;$i<count($extension_to_include);$i++) echo ' '.$extension_to_include[$i].','; if(count($extension_to_include)==0) echo ' <u>NONE</u>'; echo ' has been counted.)</i>'; } echo '<li> Folders: <b>'.$count_val[3].'</b></li> <li>Files: <b>'.$count_val[5].'</b> <i>('.$count_val[4].' excluded)</i></li> <li>Lines: <b>'.$count_val[1].'</b>; Empty: <b>'.$count_val[2].'</b>; Comment: <b>'.$count_val[0].'</b>; Total: <b>'.$count_total.'</b></li> <li>Tot. Size: <b>'; echo unite($count_val[6]); echo '</b></li> </ul> </td></tr></table>'; echo '<p align="center" style="font-size:10px">© <a href="http://other.lookstrike.com" target="_blank">Jean-Sébastien Goupil</a></p>'; echo '</body> </html>'; clearstatcache(); ?>

Conclusion :

      • Ce que le script ne fait pas :

- Si des fichiers/dossiers sont inaccessibles en lecture, une erreur sera générée
- Modifie les fichiers (aucune ouverture en écriture effectuée)
- Si vous écrivez tout votre script sur une ligne (echo 'A';if($a)echo'B';echo 'C';), vous n'aurez qu'une ligne dans votre script :)
- Compte les commentaires normalement formés...
Si votre commentaire est à la fin d'une ligne :
function... // comment
Cette ligne sera comptée comme une ligne de code
Si vous ouvrez votre commentaire avec /*, le code va attendre un */ à la fin ou au début d'une ligne et non au milieu d'une ligne !
Donc si vous faites ceci :
/* Commentaire */ function...
Cette ligne sera comptée comme commentaire et toutes les lignes suivantes aussi ! Ce n'est pas un bug... c'est comme ça.
      • Mot de l'auteur

J'utilise ce script activement pour compter le nombre de ligne de mes programmes. Il est très utile et je vous le conseille...
Oh et avant de vous vanter que votre script fait des millions de lignes, n'oubliez pas de ne pas sélectionner tous les fichiers qui ne sont pas écrits de votre main (gif, jpg, zip...)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.