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

Soyez le premier à donner votre avis sur cette source.

Vue 6 970 fois - Téléchargée 561 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_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

bon hormis quelques trucs :

- $unite_spec = array("bytes","KB","MB","GB","TB");

à remplacer par des simples quotes

- "!==FALSE" ou "==FALSE" (dans tes conditions)

inutile

- for($i=0;$i<count($all_extensions);$i++) (et d'une manière générale toutes tes boucles contenant count()

il est préférable pour des questions d'optimisation de faire ceci :
$nb=count($all_extensions)
for($i=0;$i<$nb;$i++)
{
//boucle
}


Pour ce qui est du code HTML c'est un peu crado mais largement mieux que ce qu'on voit habituellement, bref 8/10 pour moi ;-)

a ++
fg85
Messages postés
370
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
13 avril 2007
-
moi je note 7/10 car je trouve la prog un peu mal ordonné sinon je dit comme Anthomicro , c'est" largement mieux que ce qu'on voit habituellement" ça c'est sur !!

-----------------------
http://fg.logiciel.free.fr
cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
J'ai déjà répondu au genre de count() dans les boucles, et je ne les corrigerai pas...
L'HTML n'est pas crade du tout... la sortie (output) l'est peut-etre...

Ya quoi mon array("bytes"...) ?

Montre moi les conditions en défaut, si une variable est BOOLEAN, il n'est pas nécessaire de faire une comparaison d'objet... la comparaison d'objet est nécessaire si on a une variable de type mixed.

Et vraiment 4/10 pour le script que j'ai fourni je trouve ca très déplorable... Beaucoup de monde qui avait vu ce script voulait l'avoir... donc je l'ai adapté un peu, corrigé et modifié en conséquence et maintenant posté...

S'il ne plait pas, je le supprimerai simplement... bien qu'il soit utile.
fg85
Messages postés
370
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
13 avril 2007
-
En tout cas moi j'ai voter 7/10 ;-)

--------------------------
http://fg.logiciel.free.fr
cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Bah moi 8/10...

Bref si l'HTML est crade ;-)

un petit exemple (bon ce n'est qu'un exemple y'a pas que ça)

echo '© Jean-Sébastien Goupil

';

à remplacer par ça si tu ne veux rien mettre dans une CSS

echo '© Jean-Sébastien Goupil

';

et par ça si tu veux bien disposer d'une CSS :

echo '<style type="text/css">
#bas{
text-align:center;
font-size:10px;
}
</style>
© Jean-Sébastien Goupil

';

après pour ce qui est des count() ce n'est pas optimisé...

bref j'ai pas cherché ton explication que tu nous a fourni mais cette syntaxe ne se justifie pas.

a ++

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.