2011-12-19 19 views
5

He estado dando un programa PHP para trabajar. Sin embargo, este programa ha sido trabajado durante años por varias personas diferentes. Las cosas se han eliminado y agregado con el tiempo. Pero la mayoría de los archivos todavía están allí.Analizando un programa PHP

Me preguntaba si existe alguna herramienta que pueda analizar un programa de PHP. alimentarlo index.php, por ejemplo, y esta herramienta comprobará y verá que los archivos witch son llamados y utilizados para que pueda eliminar toda la madera muerta que ya no se utiliza.

Estaba pensando en escribirlo yo mismo, pero es posible que alguien más haya hecho algo como esto.

¡Cualquier sugerencia es bienvenida, Thx! Mike

+1

PHP no es adecuado para este tipo de análisis, ya que le permite escribir 'include $ _GET ['file']'. No es que nunca deba hacer tal cosa, pero significa que es * imposible * cubrir todos los casos en los que se puede incluir un archivo ... – deceze

+2

Esta ruta está llena de falsos positivos. Puede obtener una descripción general con un analizador de origen que busque referencias cruzadas de nombre de archivo. Capturar los dinámicos con certeza es muy difícil. Sin embargo, puede usar http://pecl.php.net/package/inclued para determinar los archivos realmente incluidos de manera confiable. Y [PHP Depend y otros] (http://stackoverflow.com/questions/4156157/tool-for-php-code-analysis) pueden proporcionar listas más útiles. – mario

Respuesta

1

Tiene dos opciones, una para usar xdebug y básicamente depurar su aplicación, mientras avanza encontrará los archivos que está utilizando.

Otro es fuerza bruta :)) comience a eliminar archivos uno por uno y verifique si la aplicación está rota o no. si hay mucho para probar, esto puede llevar un tiempo.

Y si está buscando una aplicación, busque el verificador de dependencias, hay cuerpos que utilizan estas aplicaciones para verificar las dependencias entre servicios, como amazon.

+0

Voy a probar el xdebug para ver qué hace eso. La fuerza bruta no es realmente una opción con el tamaño del programa y la cantidad de opciones en él. Eso llevaría una eternidad. –

+0

es una herramienta de depuración, puede entrar y salir de archivos y clases fácilmente. – DarthVader

3

Como mencionó deceze, no puede garantizar que encuentre todos los archivos a los que se hace referencia, ya que pueden depender de la entrada del usuario. Sin embargo, la forma más simple es usar una herramienta grep (hay una aplicación "Windows grep" que puede descargar, si esa es su plataforma) y encontrar todas las instancias de "incluir" y "requerir". Si encuentra la situación mencionada por deceze (include o require seguido de un nombre de variable), el archivo necesita una inspección manual, pero si hay un nombre de archivo especificado, puede agregarlo a la "lista de usuarios".

Quizás no sea la solución más efectiva, pero rápida e intuitiva.

+0

Déjame probar eso, está bien si no es 100% exacto, si puedo obtener el 90% de todo el código muerto, sigue siendo una gran mejora. –

+0

Un gran problema aquí sería estar atento a los cargadores automáticos. – pinkgothic

1

Puede obtener una matriz de todos los archivos que se incluyen llamando a la función get_included_files(). Puede agregar a cada archivo el siguiente código, que escribirá todos los archivos incluidos en una matriz en "included.php", la manera más fácil de hacerlo es usando auto_append_file. A continuación, haz clic en toda la aplicación. Cuando hayas terminado, todos los archivos que se incluyeron estarán en included.php, para que puedas ver qué archivos no se usan realmente.

<?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()); 

Por supuesto, este script no es útil para depurar que no sea su sitation actual, pero debe tener instalado y funcionando lo suficientemente rápido. Puede ser feo, pero hará su trabajo.