¿Hay un analizador de código estático [como Lint] para archivos PHP?


411

¿Hay un analizador de código estático para archivos PHP? El binario mismo puede verificar si hay errores de sintaxis, pero estoy buscando algo que haga más cosas, como asignaciones de variables no utilizadas, matrices que se asignan sin inicializar primero y posiblemente advertencias de estilo de código. Se preferirían los programas de fuente abierta, pero podríamos convencer a la empresa de que pague por algo si es muy recomendable.

  0

Sitio web relacionado: [The PHP Quality Assurance Toolchain (phpqatools.org)] (http://phpqatools.org/) y otra herramienta estática es [PHP_CompatInfo] (http://bartlett.laurent-laville.org /). 25 dic. 132013-12-25 17:12:54

+36

Righty-o: cerrado por SO, cuando claramente este tipo de respuesta es increíblemente útil. 06 ago. 142014-08-06 10:35:04

+3

de acuerdo. Esta pregunta es crucial. php lint (archivo php -l) no proporciona la otra mitad: ejecuta la carga automática, asegúrese de que exista una función, existan variables, existan las propiedades del objeto. etc. 07 nov. 142014-11-07 18:03:06

+1

Phan (para php-7) ha [acaba de ser lanzado] (https://github.com/etsy/phan). 08 dic. 152015-12-08 16:09:01

+3

@IraBaxter es útil, pero no estrictamente hablando, sobre el tema. http://softwarerecs.stackexchange.com/ es probablemente una ubicación más sobre el tema. Por supuesto, la ironía es que muchos desarrolladores más están familiarizados con SO que con sus hermanos ... 08 dic. 152015-12-08 16:51:53

+4

El hecho de que tantas personas encuentren útil este tipo de preguntas es probablemente la razón por la cual ahora existen los softwares. Ciertamente parecía sobre el tema cuando este era el único sitio de intercambio de pila. Ahora que hay un lugar claro para eso, ¿tiene sentido migrar? 08 dic. 152015-12-08 17:12:54

  0

Cerrado debido a cierres disparadores. ¡Bah! 24 nov. 162016-11-24 18:30:06

316

ejecutar PHP en modo de pelusa de la línea de comandos para validar la sintaxis sin ejecución:

  • php -l FILENAME

analizadores estáticos de nivel superior incluyen:

de nivel inferior incluyen:

analizadores de tiempo de ejecución, que son más útiles para algunas cosas debido a PHPS naturaleza dinámica, incluyen:

Las bibliotecas de documentación phpdoc y doxygen realizan un tipo de análisis de código. Doxygen, por ejemplo, se puede configurar para representar buenos gráficos de herencia con graphviz.

Otra opción es xhprof, que es similar a Xdebug, pero más ligero, por lo que es conveniente para los servidores de producción. La herramienta incluye una interfaz basada en PHP.

  0

PHP_CodeSniffer es fácil de instalar y fácil de usar. :) 01 ago. 112011-08-01 01:30:05

  0

Sé que esta es una pregunta respondida, pero aún así, usando 'php -l' como este:' find/your/path -name '* .php' | xargs -r php -l' no funciona de manera confiable. A menudo falla archivos con errores de sintaxis en ellos. 24 ago. 112011-08-24 10:38:20

+6

PHP_CodeSniffer se me veía muy bien al principio, pero no pude por mi vida hacer que NO muestre indentaciones de "errores". Parece que ignora por completo la opción '--error-severity'. 24 ago. 112011-08-24 10:51:12

+16

+1 por tomarme 6 horas de mi vida probando todas estas golosinas! 13 feb. 122012-02-13 18:48:14

+14

@dimitko: Eso es porque 'php -l' solo puede leer un archivo de entrada a la vez (es decir, no funcionará si lo haces' php -l archivo1.php archivo2.php'). En su lugar, debe usar la opción '-n 1', que le dice a' xargs' que solo use una línea de entrada por proceso de comando. Eso hará que ejecute 'php -l file1.php' seguido de' php -l file2.php', por separado. Al mismo tiempo, puede usar '-P <n>' para ejecutar procesos "n" a la vez, para paralelizar la ejecución: 'find. -name '* .inc' -o -name '* .php' -print0 | xargs -0 -n1 -P10 php -l' 05 abr. 122012-04-05 22:07:12

  0

xdebug y xhprof no son herramientas de análisis estáticas. 08 may. 122012-05-08 23:11:44

+2

@ira I * did * precedió su mención llamándolos "opciones de análisis de tiempo de ejecución", pero quizás debería haber sido más explícito? 09 may. 122012-05-09 08:10:24

+9

'find/your/path -name '* .php' -exec php -l {} \;' funciona de manera confiable. 08 ago. 122012-08-08 13:11:26

+1

Si carga muchas extensiones en su php.ini estándar, puede acelerar las cosas si usa 'php -n -l nombredearchivo.php' para que utilice los valores predeterminados incorporados para la configuración ini cuando se ejecutan controles en un conjunto grande de archivos. 06 may. 132013-05-06 12:31:55

+8

** NB **: Para que funcione la función de pelusa incorporada ('php -l'), debe establecer' display_errors = on' en 'php.ini'; de lo contrario, solo recibirá un mensaje genérico sobre que hay errores de sintaxis pero no detalles sobre qué error (s) o qué línea (s). 14 jul. 132013-07-14 04:15:57

+5

Synetech - Bueno. Sin embargo, puede anular la configuración en la línea de comando, usando el interruptor '-d'. P.ej. 'php -l -d display_errors = on $ FILENAME' 14 jul. 132013-07-14 20:10:26

+1

@dimitko, estoy de acuerdo con su evaluación de PHP_CodeSniffer. Con una adición.Fue muy bueno para encontrar todos mis errores de sangría (o eso creía, no estaba de acuerdo en la mayoría de los casos) pero en realidad no detecté los errores reales que inserté en mi código para probarlo. 13 nov. 132013-11-13 06:00:34

  0

También me gusta [Fijador de estándares de codificación de SensioLab] (http://cs.sensiolabs.org/). Esto se compara con [PSR-1] (https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) y [PSR-2] (http://www.php-fig.org/psr/psr-2/). Lo que es bueno es que puede arreglar automáticamente los archivos por ti (pero si solo quieres que liste los archivos que fallan, usa su opción '--dry-run'). 08 oct. 142014-10-08 13:50:49

  0

entonces, la mejor manera de escanear dir con código usando 8 procesos es algo así como 'find. -name "* .php" -print0 | xargs -0 -n1 -P8 php -l' 19 feb. 162016-02-19 07:23:04


34

Online PHP lint

PHPLint

Unitialized variables check. Los enlaces 1 y 2 ya parecen hacer esto bien, sin embargo.

No puedo decir que he utilizado ninguno de estos intensamente, aunque :)

  0

¡Su respuesta hizo que mi día de hoy fuera genial! +1 02 may. 142014-05-02 22:41:23


25

Para más información, también marque phpCallGraph.


4

PHP PMD (detector de desastre proyecto) y PHP CPD (detector de copiar y pegar) como la primera parte de PHPUnit


12

Ver Semantic Designs' CloneDR, una herramienta de "detección de clon" que encuentra copiar/pegar el código/editado. Encontrará fragmentos de código exactos y casi inexistentes, a pesar del espacio en blanco, los comentarios e incluso las redenominaciones variables. Se puede encontrar un informe de detección de muestra para PHP en el sitio web. (Soy el autor).

+5

+1 por "Soy el autor" 18 mar. 112011-03-18 16:57:02

+1

Al mirar el sitio, parece una herramienta increíble. Voy a echar un vistazo más de cerca más tarde! Gracias por el enlace (+1 por "Yo soy el autor" también) 29 oct. 112011-10-29 17:53:51

  0

La maldición de cualquier estudiante connivente. 15 mar. 122012-03-15 18:55:32


6

Hay una nueva herramienta llamada nWire for PHP. Es un complemento de exploración de código para Eclipse PDT y Zend Studio 7.x. Permite el análisis de código en tiempo real para PHP y proporciona las siguientes herramientas:

  • Visualización de código: representación gráfica interactiva de componentes y asociaciones.
  • Navegación por códigos: la vista de navegación única muestra todas las asociaciones y trabaja con usted mientras escribe o lee el código.
  • Búsqueda rápida - buscar mientras se escribe para los métodos, campos, archivo, etc.
+1

no es respuesta a la pregunta. como respuesta existen netbeans, etc. 22 abr. 112011-04-22 12:25:04


7

el NetBeans IDE comprueba los errores de sintaxis, variables unusued y tal. No es automático, pero funciona bien para proyectos pequeños o medianos.


22

PHP Mess Detector es impresionante y rápido.

+7

¡Gracias! Estaba buscando un increíble. De hecho, me niego a usar nada más que herramientas increíbles. :) 20 mar. 122012-03-20 14:00:40

  0

Es un comienzo, y parece ser lo que usa Netbeans, pero no confiaría en él por completo. Algunas de sus opciones son simplemente extrañas ("advirtiéndole" si usa una instrucción else ??), y hay numerosos errores grandes en sus detecciones, que ni siquiera han tenido una respuesta de los desarrolladores: https: // github .com/phpmd/phpmd/issues 16 mar. 152015-03-16 04:58:51

  0

else agrega complejidad ciclomática y a menudo se puede escribir de forma diferente para evitar y demás. p.ej. if (true) {$ x = 1; } else {$ x = 2; } puede ser reescrito: $ x = 2; if (true) {$ x = 1; } 22 nov. 172017-11-22 11:34:22


3

Además, PHP Compiler tal vez vale la pena intentarlo. Su función principal es producir binarios de PHP, pero tiene algunas capacidades de análisis.


15

He intentado usar $ php -l y otras dos herramientas. Sin embargo, el mejor en mi experiencia (YMMV, por supuesto) es scheck of pfff toolset. Me enteré de pfff en Quora (http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool)

Puede compilar e instalarlo. No hay paquetes agradables (en mi menta Debian, primero tuve que instalar las dependencias libpcre3-dev, ocaml, libcairo-dev, libgtk-3-dev y libgimp2.0-dev), pero debería valer la pena una intsall.

Los resultados se presentan como

[email protected] ~ $ ~/sw/pfff/scheck ~/code/github/sc/ 
login-now.php:7:4: CHECK: Unused Local variable $title 
go-automatic.php:14:77: CHECK: Use of undeclared variable $goUrl. 
  0

Gracias. Sigue quejándose de nuestras importaciones dinámicas, pero sus otras capacidades se ven bien hasta ahora. También necesitaba instalar binutils-gold, y scheck necesitaba instalarse en una ruta personalizada, pero parece funcionar ahora. 07 jun. 122012-06-07 23:22:34

+1

@eswald Ahora un día soy un convertidor de php mess detector (phpmd). De todas las herramientas que he probado hasta ahora (php code sniffer, scheck, php -l, phpmd), en mi humilde opinión, phpmd funciona mejor para mi caso. 08 jun. 122012-06-08 03:58:59

  0

¿Sabes dónde encontrar a Scheck? 23 may. 132013-05-23 13:52:44

+1

@GeorgeKatsanos scheck es parte del conjunto de herramientas pfff. https://github.com/facebook/pfff 24 may. 132013-05-24 09:19:55

+1

Scheck siempre me da el error "php checker necesita un archivo de gráfico". La documentación, en su mayoría inexistente, no tiene ejemplos. 26 ene. 162016-01-26 00:37:00


3

No hay absolutamente nueva herramienta para el análisis de código estático llamado PHP Analyzer.

Entre los muchos tipos de análisis estático sino que también proporciona la funcionalidad básica de auto-fijación, ver documentation.

ACTUALIZACIÓN: PHP-analizador está obsoleto proyecto, pero todavía se puede acceder a él en la rama legado


2

es posible que desee para tratar de compilar con hiphop de Facebook.

Se hace un análisis estático en todo el proyecto, y puede ser lo que estás buscando.

https://github.com/facebook/hiphop-php


4

Hay RIPS - A static source code analyser for vulnerabilities in PHP scripts. Fuentes de RIPS disponibles en SourceForge.

Desde el sitio RIPS:

RIPS es una herramienta escrita en PHP para encontrar vulnerabilidades en PHP aplicaciones que utilizan el análisis de código estático. Al tokenizar y analizar todos los archivos de código fuente , RIPS puede transformar el código fuente PHP en un modelo de programa y detectar sumideros sensibles (funciones potencialmente vulnerables ) que pueden verse afectados por la entrada de usuario (influenciada por un usuario malintencionado ) durante el programa fluir. Además del resultado estructurado de las vulnerabilidades encontradas, RIPS también ofrece un marco de auditoría de código integrado para un posterior análisis manual.

  0

RIPS es un proyecto medio muerto y solo funciona con código de PHP no OOP. 29 ago. 142014-08-29 06:37:02