# (gH) -_- ldphp.pl ; TimeStamp (unix) : 08 Janvier 2008 vers 13:05 ############################################################################ # # ldphp.pl : liste des fonctions d'un module Php ; (gH) 2008 # ############################################################################ $version_ldphp = 1.3 ; use lib $ENV{"PERL_MACROS"} ; # répertoire qui contient mes macros use strFuncs ; # # on détecte : include # include_once # require_once # function # if ($ARGV[0] eq "") { print "\n" ; print " syntaxe : ldphp nom_de_fichier.php \n" ; print "\n" ; exit(-1) ; } ; # fin de test sur les arguments $fs = "ldphp.sor" ; # fichier de sortie open( FS ,">$fs") || die "\n impossible d'écrire dans le fichier $fs\n\n" ; $nomp = $ARGV[0] ; # nom du programme if (! ( (-e $nomp) && (-r $nomp) ) ) { die "\n Impossible de lire dans le fichier $nomp\n\n" ; } ; print "\n" ; $msg = "Analyse du fichier $nomp" ; print " $msg \n" ; print FS " $msg \n" ; print FS " ".("=" x length($msg))."\n" ; print FS " ".&dateEtHeure()."\n\n" ; print FS " Liste des fichiers inclus \n" ; print FS " ------------------------- \n" ; print FS " (format : nom du fichier et nombre de lignes dans le fichier) \n\n" ; # on passe en revue le fichier et on cherche les inclusions # puis les fonctions @tdmar = split(" ","include( include_once( require_once(") ; # tableau des mots à rechercher $lstFicTmp = " $nomp " ; # liste des fichiers $lstFonc = " " ; # liste des fonctions $lstFicVus = " $nomp " ; # fichiers déjà vus while (&nbMots($lstFicTmp)>0) { $nomf = &premierMot($lstFicTmp) ; $nomf = trim($nomf) ; if (length($nomf)>0) { #print " FICHIER $nomf\n" ; $lstFicTmp = &phraseSansPremierMot($lstFicTmp) ; $lstFic .= $nomf." " ; open(FC,"<$nomf") || die "\n impossible de lire dans le fichier $nomf\n\n\n" ; $nblc = 0 ; while ($lig=) { $nblc++ ; # 1. recherche d'inclusion foreach $mac (@tdmar) { $pdi = index($lig,$mac) ; # position de include ou assimilé if ($pdi>-1) { $ll = substr($lig,0,index($lig,')')) ; # $dl = substr($ll,1+index($ll,'"')) ; # début de ligne $nn = substr($dl,0,index($dl,'"')) ; # nom de fichier $nn = &trim($nn) ; #print " $nn \n" ; if ($nn ne "once(") { if (index(" $lstFicTmp "," $nn ")==-1) { # ajout éventuel if (index(" $lstFicVus "," $nn ")==-1) { # ajout éventuel $lstFicTmp .= " $nn" ; $lstFicVus .= " $nn" ; } ; # fin de si } ; # fin de si } ; # fin de si } ; # fin si on a vu le mot à chercher } ; # fin pour chaque # 2. recherche du mot function $mac = "function" ; $pdf = index($lig,$mac) ; # position de function if (($pdf>-1) && (&premierMot($lig) eq $mac)) { $dl = substr($lig,length($mac)+1) ; # début de ligne $nf = substr($dl,0,index($dl,'(')) ; # nom de fichier $nf = &trim($nf) ; if (index(" $lstFonc "," $nf ")==-1) { # ajout éventuel $lstFonc .= " $nf " ; $fdnbl{$nf} = $nblc ; $sdnbl{$nf} = $nomf ; } ; # fin de si } ; # fin si on a vu le mot function } ; # fin de tant que non fin de fichier sur FC $tdnbl{$nomf} = $nblc ; close(FC) ; } } ; # fin de tant que sur lstFic # affichage des fichiers @tabfic = sort split(" ",$lstFic) ; print "\n" ; $numf = 0 ; # nombre de fichiers $nbl_t = 0 ; # nombre de lignes en tout foreach $fic (@tabfic) { $numf++ ; $ls = " ".sprintf("%3d",$numf).". " ; if ($fic eq $nomp) { $ls .= "*" ; } else { $ls .= " " ; } ; $ls .= " ".surncarg($fic,20).sprintf("%6d",$tdnbl{$fic})."\n" ; $nbl_t += $tdnbl{$fic} ; print $ls ; print FS $ls ; } ; # fin pour chaque print " total ".sprintf("%6d",$nbl_t)." lignes\n" ; print FS " total ".sprintf("%6d",$nbl_t)." lignes\n" ; print FS "\n" ; # affichage des fonctions print FS " Liste des fonctions (et position dans le fichier)\n" ; print FS " --------------------\n\n" ; $numf = 0 ; foreach $fonc (sort split(" ",$lstFonc)) { $numf++ ; $ls = " ".sprintf("%3d",$numf).". " ; $ls .= " ".surncarg($fonc,30) ; $ls .= " ".surncarg($sdnbl{$fonc},30) ; $ls .= " ".sprintf("%6d",$fdnbl{$fonc})."\n" ; print FS $ls ; } ; # fin pour chaque print FS "\n" ; # fonctions par fichier foreach $fic (@tabfic) { $ls = "Fonction(s) du fichier $fic" ; print FS " $ls (et position dans le fichier)\n" ; print FS " ".("-" x length($ls))."\n" ; $numf = 0 ; foreach $fonc (sort split(" ",$lstFonc)) { if ($sdnbl{$fonc} eq $fic) { $numf++ ; $ls = " ".sprintf("%3d",$numf).". " ; $ls .= " ".surncarg($fonc,30) ; $ls .= " ".sprintf("%6d",$fdnbl{$fonc})."\n" ; print FS $ls ; } ; # fin de si } ; # fin pour chaque if ($numf==0) { print FS " aucune fonction.\n" ; } ; # fin de si print FS "\n" ; } ; # fin pour chaque # affichages de fin print "\n ... vous pouvez consulter $fs\n\n" ; print FS "\n" ; close(NP) ; close(FS) ;