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

Soyez le premier à donner votre avis sur cette source.

Vue 7 059 fois - Téléchargée 568 fois

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

Ajouter un commentaire

Commentaires

cs_GRenard
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Salut, merci du commentaire mais je ne pense pas faire une version 2 du script pour le moment... manque total de temps...
Mais si je le change je prendrais tes commentaires en note...
aurelien0306
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009
-
Salut,

petit script bien intéressant et utile
dommage que ça manque un peu de souplesse (personnalisation simple, appel depuis une url...) mais ça se sera peut-être dans les bonus (car le script est déja très bon comme ça)...

Malgré tout, d'accord avec anthomicro, le html est pas trop "propre" et quand tu dis "Et le standard pour le moment accepte très bien ce que j'ai écrit ! (w3c)", je viens de valider ta page avec le validateur du w3c et tu verras que ça ne passe pas (même en précisant un doctype) (cf n'accepte que des <li>)...

et aussi peut-être que mais c'est purement subjectif, le tableau count_val serait plus lisible s'il était avec des clés non numériques du genre $count_val = array('comment'=>0,'line'=> 0, 'white line'=> 0,...)

Mais sinon ton script est bien 7/10... (peut-être une V2 excellente pour bientôt qui sait... ;))
kegi
Messages postés
164
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008
-
10/10 très utile et bien fait.

merci !

cordialement,
kegi@hotmail.com
eax
Messages postés
728
Date d'inscription
jeudi 20 juin 2002
Statut
Membre
Dernière intervention
7 novembre 2007
-
ça rapelle qq chose ça ;)
cs_cacoun
Messages postés
60
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2013
-
Oki, merci....
et la bonne année à tous

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.