480 votes

Comment puis-je effectuer une analyse statique du code en PHP ?

Existe-t-il un outil d'analyse statique pour les fichiers sources PHP ?

Le binaire lui-même peut vérifier les erreurs de syntaxe, mais je cherche quelque chose qui fasse plus, comme :

  • affectations de variables inutilisées
  • les tableaux qui sont assignés sans être initialisés au préalable.
  • et éventuellement des avertissements de style de code
  • ...

0 votes

Site web connexe : La chaîne d'outils d'assurance qualité de PHP (phpqatools.org) et un autre outil statique est PHP_CompatInfo .

64 votes

Righty-o : fermé par SO, alors qu'il est clair que ce genre de réponse est incroyablement utile.

3 votes

D'accord. Cette question est cruciale. php lint (php -l file) ne fournit pas l'autre moitié : exécuter l'autoload, s'assurer qu'une fonction appelée existe, que les variables existent, que les propriétés des objets existent. etc.

374voto

troelskn Points 51966

Exécuter php en mode lint à partir de la ligne de commande pour valider la syntaxe sans exécution :

php -l FILENAME

Les analyseurs statiques de niveau supérieur comprennent :

Les analyseurs de niveau inférieur comprennent :

Les analyseurs d'exécution, qui sont plus utiles pour certaines choses en raison de la nature dynamique de PHP, incluent :

Les bibliothèques de documentation phpdoc y Doxygen effectuer une sorte d'analyse de code. Doxygen, par exemple, peut être configuré pour rendre de jolis graphiques d'héritage avec Graphviz .

Une autre option est xhprof qui est similaire à Xdebug, mais plus léger, ce qui le rend adapté aux serveurs de production. L'outil comprend une interface basée sur PHP.

0 votes

PHP_CodeSniffer est facile à installer et à utiliser :)

0 votes

Je sais que c'est une question à laquelle on a répondu, mais quand même, en utilisant php -l comme ça : find /your/path -name '*.php' | xargs -r php -l ne fonctionne pas de manière fiable. Il manque souvent des fichiers contenant des erreurs de syntaxe.

6 votes

PHP_CodeSniffer me semblait très bien au départ, mais je n'ai pas réussi à faire en sorte qu'il n'affiche pas les indentations des "erreurs". Il semble qu'il ignore les --error-severity entièrement.

38voto

Martijn Laarman Points 8097

Lint PHP en ligne

PHPLint

Contrôle des variables unitarisées . Les liens 1 et 2 semblent déjà faire cela très bien, cependant.

Je ne peux pas dire que j'ai utilisé l'un d'entre eux de manière intensive, cependant :)

0 votes

Sa réponse a rendu ma journée d'aujourd'hui formidable ! +1

27voto

Till Points 14673

Pour être complet, vérifiez également phpCallGraph .

25voto

Aredridel Points 763

Détecteur de messages PHP est génial et rapide.

7 votes

Merci ! J'étais à la recherche d'un impressionnant. En fait, je refuse d'utiliser autre chose que des outils géniaux :)

2 votes

C'est un début, et il semble que ce soit ce que Netbeans utilise, mais je ne lui ferais pas entièrement confiance. Certaines de ses options sont tout simplement étranges ("vous avertir" si vous utilisez une instruction else ??), et il y a de nombreux gros bogues dans ses détections, qui n'ont même pas eu de réponse des développeurs : github.com/phpmd/phpmd/issues

1 votes

Else ajoute une complexité cyclomatique et peut souvent être écrit différemment pour éviter and else. Par exemple, if (true) { $x=1 ; } else { $x =2 ; } peut être réécrit : $x=2 ; if (true) { $x = 1 ; }.

17voto

rjha94 Points 1879

J'ai essayé d'utiliser php -l et quelques autres outils.

Cependant, selon mon expérience, la meilleure (votre avis peut varier, bien sûr) est la suivante schéma de la boîte à outils pfff . J'ai entendu parler de pfff sur Quora ( Existe-t-il un bon outil de vérification et d'analyse statique de PHP ? ).

Vous pouvez le compiler et l'installer. Il n'y a pas de paquets sympas (sur mon Linux Mint système Debian, j'ai dû installer le libpcre3-dev , ocaml , libcairo-dev , libgtk-3-dev y libgimp2.0-dev dépendances d'abord) mais cela devrait valoir la peine de l'installer.

Les résultats sont présentés comme suit

$ ~/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 votes

Merci. Il continue à se plaindre de nos importations dynamiques, mais ses autres capacités semblent bonnes jusqu'à présent. J'ai également dû installer binutils-gold, et scheck a dû être installé dans un chemin personnalisé, mais cela semble fonctionner maintenant.

1 votes

@eswald Aujourd'hui, je suis un convertisseur de détecteur de désordre php (phpmd). De tous les outils que j'ai essayé jusqu'à présent (php code sniffer, scheck, php -l, phpmd), IMHO, phpmd fonctionne le mieux pour mon cas.

0 votes

Savez-vous où trouver Scheck ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X