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 à la page principale de (gH)