Newsgroup: it.comp.www.php
Titolo: Di quali estensioni PHP ha bisogno un programma

Ho una grossa applicazione PHP.
Questa ha bisogno di alcune estensioni. Al momento funziona, ma include un 
numero esagerato di estensioni PHP. So di certo che non tutte sono 
necessarie.
Esiste un programma, che analizza i miei files php, e che mi dice di quali 
estensioni ho bisogno? 

Kon T. Amusse ha scritto:

Non credo che esista nulla di gia' pronto ma probabilmente puoi
ottenere quello che cerchi utilizzando queste funzioni:
http://www.php.net/token_get_all
http://www.php.net/get_loaded_extensions
http://www.php.net/get_extension_funcs
In pratica utilizzi get_loaded_extensions() / get_extension_funcs() per
ottenere una lista delle funzioni attive nel sistema con la relativa
estensione (puo' essere utile anche array_flip()).
Poi utilizzi token_get_all() su tutti i file PHP (puoi utilizzare dir()
o glob per automtizzare il tutto), fai il parsing del contenuto, crei
un array contenente i nomi delle classi e delle funzioni utilizzate e
poi utilizzi i dati ottenuti in precedenza per individuare le
estensioni utilizzate.
Poi ti dovrebbero avanzare una manciata di funzioni che puoi ridurre
ancora utilizzando get_defined_functions() e filtrando le funzioni
definite dall'utente.
Se utilizzi un qualche tipo di reflection per creare le classi (es. new
$classname) o per richiamare le funzioni potresti non essere in grado
di individuare con precisione tutte le estensioni necessarie, ma la
maggior parte si. Poi basta fare un po di "divide et impera" per
identificare eventuali estensioni mancanti.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 ottenere quello che cerchi utilizzando queste funzioni:
Ecco fatto!
Posto il codice perche' potrebbe essere utile a qualcun altro.
Usa il file preg_match.inc.php, che sarebbe poi questo:
http://www.pgregg.com/projects/php/preg_find/preg_find.phps
<?php
// Find all extensions needed by a PHP application
// How to use: change $BaseDir to the root directory of the application, and 
run this script from command line
require( "preg_match.inc.php" ) ;
$BaseDir = 'c:/e/webtest/petra' ;
foreach( preg_find( "/\.php$/", $BaseDir, PREG_FIND_RECURSIVE ) as 
$ThisFile )
        {
        //print "*** Reading file $ThisFile ***\n" ;
        $FullFile = file_get_contents( $ThisFile ) ;
        $TokensList = token_get_all( $FullFile ) ;
        foreach( $TokensList as $Token )
                {
                if ( $Token[ 0 ] == T_STRING && isset( $Token[ 1 ] ) )
                        {
                        //print $Token[ 1 ] . "\n" ;
                        $AllUsedCalls[ $Token[ 1 ] ] = 1 ;
                        }
                }
        }
$AllExtensions = get_loaded_extensions() ;
foreach( $AllExtensions as $ThisExtension )
        {
        //print "Checking extension: $ThisExtension\n" ;
        $AllFunctionsOfThisExtension = get_extension_funcs( $ThisExtension ) 
;
        if ( ! is_array( $AllFunctionsOfThisExtension ) )
                continue ;
        $UsedArray = array() ;
        foreach( $AllFunctionsOfThisExtension as $ThisExtensionFunction )
                {
                if ( isset( $AllUsedCalls[ $ThisExtensionFunction ] ) )
                        $UsedArray[ $ThisExtensionFunction ] = 
$ThisExtensionFunction ;
                }
        if ( count( $UsedArray ) > 0 )
                print '*** We need extension ' . $ThisExtension . ' because 
of ' . implode( ',', $UsedArray ) . " ***\n" ;
        }
?>