# (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=<FC>) {
$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) ;
|