2011-12-19 13 views
5

Ho dato un programma PHP su cui lavorare. Tuttavia, questo programma è stato lavorato per anni da diverse persone diverse. Le cose sono state rimosse e aggiunte nel tempo. Ma la maggior parte dei file sono ancora lì.Analisi di un programma PHP

Mi chiedevo se c'è uno strumento là fuori che può analizzare un programma PHP. per esempio alimentalo index.php e questo strumento controllerà e vedrà i file delle streghe richiamati e usati in modo da poter rimuovere tutto il legno morto che non è più utilizzato.

Stavo pensando di scriverlo da solo, ma qualcun altro avrebbe già potuto fare qualcosa del genere.

Qualsiasi suggerimento è benvenuto, grazie! Mike

+1

PHP non è adatto per tale analisi, poiché consente di scrivere 'include $ _GET ['file']'. Non che tu debba mai fare una cosa del genere, ma significa che è * impossibile * coprire tutti i casi in cui un file può essere incluso ... – deceze

+2

Questo percorso è maturo con falsi positivi. È possibile ottenere una panoramica con un analizzatore di origine alla ricerca di riferimenti incrociati al nome file. Catturare quelli dinamici con certezza è molto difficile. Puoi comunque usare http://pecl.php.net/package/inclued per determinare in modo affidabile i file effettivamente inclusi. E [PHP Depend and others] (http://stackoverflow.com/questions/4156157/tool-for-php-code-analysis) può fornire elenchi più utili. – mario

risposta

1

Si hanno due opzioni, una per usare xdebug e fondamentalmente eseguire il debug dell'applicazione, mentre si passa attraverso si troveranno i file in uso.

Un'altra forza bruta :)) avvia l'eliminazione dei file uno a uno e controlla l'app se è rotta o meno. se c'è molto da testare, potrebbe volerci un po 'di tempo.

E se stai cercando un'applicazione, cerca il controllore delle dipendenze, ci sono dei corps che usano queste app per controllare le dipendenze tra servizi, come Amazon.

+0

Proverò xdebug per vedere cosa fa. La forza bruta non è davvero un'opzione con la dimensione del programma e la quantità di opzioni in esso. Ci vorrebbe per sempre. –

+0

è uno strumento di debug, puoi facilmente entrare e uscire da file e classi. – DarthVader

3

Come descritto in precedenza, non è possibile garantire di trovare tutti i file di riferimento in quanto potrebbero dipendere dall'input dell'utente. Comunque il modo più semplice è usare uno strumento grep (c'è un'applicazione "windows grep" che puoi scaricare, se questa è la tua piattaforma) e trovare tutte le occorrenze di "include" e "require". Se si incontra la situazione menzionata dall'inganno (includere o richiedere seguito da un nome di variabile), il file richiede un'ispezione manuale, ma se è specificato un nome file, è possibile aggiungerlo alla "lista utilizzata".

Forse non la soluzione più efficace, ma veloce e intuitiva.

+0

Lasciatemi fare una prova, va bene se non è preciso al 100%, se riesco a ottenere il 90% di tutto il codice morto da esso è ancora un grande miglioramento. –

+0

Un grande trucco qui starebbe guardando per i caricatori automatici. – pinkgothic

1

È possibile ottenere una matrice di tutti i file inclusi chiamando la funzione get_included_files(). Puoi aggiungere ogni file con il seguente codice, che scriverà tutti i file inclusi in un array in "included.php", il modo più semplice per farlo è usare auto_append_file. Quindi, fai clic sull'intera applicazione. Quando hai finito tutti i file che sono stati inclusi saranno inclusi in.php.php, in modo da poter individuare quali file non vengono effettivamente utilizzati.

<?php 
function writeIncludes(array $includes) { 
    $filename = __DIR__ . '/included.php'; 

    $output = "<?php\nreturn "; 
    if(file_exists($filename)) { 
    $files = include($filename); 
    } 
    else { 
    $files = array(); 
    } 

    $files = array_merge($files, $includes); 
    $output .= var_export($files, true); 

    file_put_contents($filename, $output); 
} 

writeIncludes(get_included_files()); 

Naturalmente, questo script non è utile per il debug diverso dal sitation corrente, ma si dovrebbe ottenere installato e funzionante abbastanza veloce. Potrebbe essere brutto, ma farà il suo lavoro.