Jak przeprowadzić statyczną analizę kodu w PHP? [zamknięte]

zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[3] } dla przepełnienia stosu.

Zamknięte 7 lat temu .

Popraw to pytanie

Czy istnieje narzędzie do analizy statycznej dla plików źródłowych PHP?

Sam binarny może sprawdzić Błędy składniowe, ale szukam czegoś, co zrobi więcej, na przykład:

  • nieużywany przypisania zmiennych
  • tablice, do których są przypisane bez inicjalizacji
  • i ewentualnie ostrzeżenia w stylu kodu
  • ...
Author: Peter Mortensen, 2008-12-18

12 answers

Uruchom php w trybie lint z linii poleceń, aby zweryfikować składnię bez wykonywania:

php -l FILENAME

Analizatory statyczne wyższego poziomu obejmują:

Analizatory niższego poziomu include:

Analizatory Runtime, które są bardziej przydatne dla niektórych rzeczy ze względu na dynamiczny charakter PHPs, obejmują:

Biblioteki dokumentacji phpdoc i doxygen wykonują rodzaj analizy kodu. Na przykład, Doxygen może być skonfigurowany do renderowania ładnych Wykresów dziedziczenia za pomocą graphviz.

Inną opcją jestxhprof , który jest podobny do xdebug, ale lżejszy, dzięki czemu nadaje się do serwerów produkcyjnych. Narzędzie zawiera interfejs oparty na PHP.

 366
Author: troelskn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 00:22:41

Online PHP lint

PHPLint

Unitialized variables check . Link 1 i 2 już wydają się robić to dobrze.

Nie mogę jednak powiedzieć, że używałem ich intensywnie:)

 38
Author: Martijn Laarman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-03 22:32:47

Dla kompletności -- sprawdź również phpCallGraph.

 27
Author: Till,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-19 11:29:23

PHP Mess Detector jest niesamowity i szybki.

 25
Author: aredridel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 13:09:12

Próbowałem użyć php -l i kilku innych narzędzi.

Jednak najlepszym z moich doświadczeń (przebieg może się różnić, oczywiście) jest scheck z zestawu narzędzi pfff . Słyszałem o pfff na Quorze (czy istnieje dobre narzędzie do analizy lint / statycznej PHP?).

Możesz go skompilować i zainstalować. Nie ma ładnych pakietów (na moim Linux Mint Debian system, musiałem zainstalować libpcre3-dev, ocaml, libcairo-dev , libgtk-3-dev i libgimp2.0-dev najpierw zależności), ale powinna być warta instalacji.

Wyniki są zgłaszane jak

$ ~/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.
 17
Author: rjha94,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-07 16:58:16

Zobacz Semantic Designs' CloneDR, Narzędzie do wykrywania klonów, które znajduje kopiuj / wklej / edytowany kod.

Znajdzie dokładne i bliskie fragmenty kodu, pomimo białych spacji, komentarzy, a nawet zmiennych zmian nazw. Przykładowy raport wykrywania PHP można znaleźć na stronie internetowej. (Jestem autorem.)

 14
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-07 16:50:17

NetBeans IDE sprawdza Błędy składniowe, nieużywane zmienne itp. Nie jest zautomatyzowany, ale działa dobrze dla małych i średnich projektów.

 7
Author: slikts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 08:32:43

Istnieje nowe narzędzie o nazwie nWire dla PHP. Jest to wtyczka do eksploracji kodu dla Eclipse PDT i Zend Studio 7.x. umożliwia analizę kodu w czasie rzeczywistym dla PHP i zapewnia następujące narzędzia:

  • Wizualizacja kodu-interaktywne graficzne przedstawienie komponentów i skojarzeń.
  • Nawigacja kodu-unikalny widok nawigacji pokazuje wszystkie skojarzenia i współpracuje z Tobą podczas pisania lub czytania kodu.
  • Quick search-szukaj jak ty typ dla metod, pól, pliku, itp.
 6
Author: zvikico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-07 16:57:34

PHP PMD (Wykrywacz błędów programowania) i PHP CPD (Wykrywacz kopiowania/wklejania) jako dawna część PHPUnit.

 5
Author: erenon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-07 17:04:33

Istnieje RIPS - statyczny analizator kodu źródłowego dla luk w skryptach PHP . Źródła RIP dostępne w SourceForge .

Ze strony RIPS:

RIPS jest narzędziem napisanym w PHP do znajdowania luk w PHP aplikacje wykorzystujące statyczną analizę kodu. Poprzez tokenizację i analizę wszystkich pliki kodu źródłowego RIPS jest w stanie przekształcić kod źródłowy PHP w model programu oraz wykrywanie wrażliwych zlewozmywaków (potencjalnie podatnych na funkcje), które mogą być skażone przez userinput (pod wpływem złośliwego użytkownika) podczas przepływu programu. Poza strukturyzowanym efektem znalezionych luki RIPS oferuje również zintegrowaną strukturę audytu kodu do dalszej analizy manualnej.

 4
Author: SteAp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 23:49:03

Istnieje narzędzie do statycznej analizy kodu o nazwie PHP Analyzer . PHP Analyzer jest obecnie przestarzałym projektem, ale nadal możesz uzyskać do niego dostęp w starszej gałęzi.

Wśród wielu rodzajów analizy statycznej zapewnia również podstawową funkcję automatycznego naprawiania, patrz dokumentacja .

 3
Author: fatganz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-07 17:07:03

Możesz spróbować skompilować z hiphopem Facebook ' a.

Robi statyczną analizę całego projektu i może być tym, czego szukasz.

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

 2
Author: Martin Konecny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-26 03:08:46