Valid XHTML     Valid CSS2    

Listing du fichier ldfphp.pl

 

00001     # (gH) -_- ldfphp.pl ; TimeStamp (unix) : 08 Janvier 2008 vers 13:05
00002     
00003     #######################################################################################
00004     # #
00005     # ldfphp.pl : liste des fonctions d'un module Php et de ses "include" ; (gH) 2008 #
00006     # #
00007     #######################################################################################
00008     
00009     $version_ldfphp = 1.3 ;
00010     
00011     use lib $ENV{"PERL_MACROS"} ; # répertoire qui contient mes macros
00012     use strFuncs ;
00013     
00014     #
00015     # on détecte : include(
00016     # include_once(
00017     # require_once(
00018     # function(
00019     #
00020     
00021     ## 1. test des paramètres
00022     
00023     if ($ARGV[0] eq "") {
00024      print "\n" ;
00025      print " syntaxe : ldfphp nom_de_fichier.php \n" ;
00026      print "\n" ;
00027      exit(-1) ;
00028     } ; # fin de test sur les arguments
00029     
00030     ## 2. vérification du fichier d'entrée et préparation du fichier de sortie
00031     
00032     $fs = "ldfphp.sor" ; # fichier de sortie
00033     open( FS ,">$fs") || die "\n impossible d'écrire dans le fichier $fs\n\n" ;
00034     
00035     $nomp = $ARGV[0] ; # nom du programme
00036     if (! ( (-e $nomp) && (-r $nomp) ) ) { die "\n Impossible de lire dans le fichier $nomp\n\n" ; } ;
00037     
00038     ## 3. affichage du titre
00039     
00040     print "\n" ;
00041     $msg = "Analyse du fichier $nomp" ;
00042     print " $msg \n" ;
00043     print FS " $msg \n" ;
00044     print FS " ".("=" x length($msg))."\n" ;
00045     print FS " ".&dateEtHeure()."\n\n" ;
00046     
00047     print FS " Liste des fichiers inclus \n" ;
00048     print FS " ------------------------- \n" ;
00049     print FS " (format : nom du fichier et nombre de lignes dans le fichier) \n\n" ;
00050     
00051     ## 4. analyse des include
00052     
00053     # on passe en revue le fichier et on cherche les inclusions
00054     # puis les fonctions
00055     
00056     @tdmar = split(" ","include( include_once( require_once(") ; # tableau des mots à rechercher
00057     $lstFicTmp = " $nomp " ; # liste des fichiers
00058     $lstFonc = " " ; # liste des fonctions
00059     $lstFicVus = " $nomp " ; # fichiers déjà vus
00060     
00061     while (&nbMots($lstFicTmp)>0) {
00062     
00063      $nomf = &premierMot($lstFicTmp) ;
00064      $nomf = trim($nomf) ;
00065      if (length($nomf)>0) {
00066      $lstFicTmp = &phraseSansPremierMot($lstFicTmp) ;
00067      $lstFic .= $nomf." " ;
00068      open(FC,"<$nomf") || die "\n impossible de lire dans le fichier $nomf\n\n\n" ;
00069      $nblc = 0 ;
00070      while ($lig=<FC>) {
00071      $nblc++ ;
00072     
00073      # 4.1 recherche d'inclusion
00074     
00075      foreach $mac (@tdmar) {
00076      $pdi = index($lig,$mac) ; # position de include ou assimilé
00077      if ($pdi>-1) {
00078      $ll = substr($lig,0,index($lig,')')) ; #
00079      $dl = substr($ll,1+index($ll,'"')) ; # début de ligne
00080      $nn = substr($dl,0,index($dl,'"')) ; # nom de fichier
00081      $nn = &trim($nn) ;
00082      if ($nn ne "once(") {
00083      if (index(" $lstFicTmp "," $nn ")==-1) { # ajout éventuel
00084      if (index(" $lstFicVus "," $nn ")==-1) { # ajout éventuel
00085      $lstFicTmp .= " $nn" ;
00086      $lstFicVus .= " $nn" ;
00087      } ; # fin de si
00088      } ; # fin de si
00089      } ; # fin de si
00090      } ; # fin si on a vu le mot à chercher
00091      } ; # fin pour chaque mot à chercher
00092     
00093      # 4.2 recherche du mot function
00094     
00095      $mac = "function" ;
00096      $pdf = index($lig,$mac) ; # position de function
00097      if (($pdf>-1) && (&premierMot($lig) eq $mac)) {
00098      $dl = substr($lig,length($mac)+1) ; # début de ligne
00099      $nf = substr($dl,0,index($dl,'(')) ; # nom de fonction
00100      $nf = &trim($nf) ;
00101      if (index(" $lstFonc "," $nf ")==-1) { # ajout éventuel
00102      $lstFonc .= " $nf " ;
00103      $fdnbl{$nf} = $nblc ;
00104      $sdnbl{$nf} = $nomf ;
00105      } ; # fin de si
00106      } ; # fin si on a vu le mot function
00107      } ; # fin de tant que non fin de fichier sur FC
00108      $tdnbl{$nomf} = $nblc ;
00109      close(FC) ;
00110      }
00111     } ; # fin de tant que sur lstFic
00112     
00113     ## 5. affichage des fichiers
00114     
00115     @tabfic = sort split(" ",$lstFic) ;
00116     print "\n" ;
00117     $numf = 0 ; # nombre de fichiers
00118     $nbl_t = 0 ; # nombre de lignes en tout
00119     foreach $fic (@tabfic) {
00120      $numf++ ;
00121      $ls = " ".sprintf("%3d",$numf).". " ;
00122      if ($fic eq $nomp) { $ls .= "*" ; } else { $ls .= " " ; } ;
00123      $ls .= " ".surncarg($fic,20).sprintf("%6d",$tdnbl{$fic})."\n" ;
00124      $nbl_t += $tdnbl{$fic} ;
00125      print $ls ;
00126      print FS $ls ;
00127     } ; # fin pour chaque fichier
00128     print " total ".sprintf("%6d",$nbl_t)." lignes\n" ;
00129     print FS " total ".sprintf("%6d",$nbl_t)." lignes\n" ;
00130     print FS "\n" ;
00131     
00132     ## 6. affichage des fonctions
00133     
00134     print FS " Liste des fonctions (et position dans le fichier)\n" ;
00135     print FS " --------------------\n\n" ;
00136     
00137     $numf = 0 ;
00138     foreach $fonc (sort split(" ",$lstFonc)) {
00139      $numf++ ;
00140      $ls = " ".sprintf("%3d",$numf).". " ;
00141      $ls .= " ".surncarg($fonc,30) ;
00142      $ls .= " ".surncarg($sdnbl{$fonc},30) ;
00143      $ls .= " ".sprintf("%6d",$fdnbl{$fonc})."\n" ;
00144      print FS $ls ;
00145     } ; # fin pour chaque fonction
00146     print FS "\n" ;
00147     
00148     ## 7. détail des fonctions par fichier
00149     
00150     foreach $fic (@tabfic) {
00151      $ls = "Fonction(s) du fichier $fic" ;
00152      print FS " $ls (et position dans le fichier)\n" ;
00153      print FS " ".("-" x length($ls))."\n" ;
00154      $numf = 0 ;
00155      foreach $fonc (sort split(" ",$lstFonc)) {
00156      if ($sdnbl{$fonc} eq $fic) {
00157      $numf++ ;
00158      $ls = " ".sprintf("%3d",$numf).". " ;
00159      $ls .= " ".surncarg($fonc,30) ;
00160      $ls .= " ".sprintf("%6d",$fdnbl{$fonc})."\n" ;
00161      print FS $ls ;
00162      } ; # fin de si
00163      } ; # fin pour chaque
00164      if ($numf==0) {
00165      print FS " aucune fonction.\n" ;
00166      } ; # fin de si sur numf
00167      print FS "\n" ;
00168     } ; # fin pour chaque fichier
00169     
00170     ## 8. affichages de fin
00171     
00172     print "\n ... vous pouvez consulter $fs\n\n" ;
00173     print FS "\n" ;
00174     close(NP) ;
00175     close(FS) ;
00176     

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)