Czy istnieje narzędzie do analizy statycznej plików źródłowych PHP? Sam plik binarny może sprawdzać błędy składniowe, ale szukam czegoś, co robi więcej, na przykład:
- nieużywane przypisania zmiennych
- tablice, które są przypisywane bez inicjowania jako pierwsze
- i ewentualnie ostrzeżenia w stylu kodu
- ...
php
code-analysis
static-analysis
Eswald
źródło
źródło
Odpowiedzi:
Uruchom php w trybie lint z wiersza poleceń, aby sprawdzić poprawność składni bez wykonania:
php -l FILENAME
Analizatory statyczne wyższego poziomu obejmują:
Analizatory niższego poziomu obejmują:
Analizatory środowiska wykonawczego, które są bardziej przydatne w niektórych przypadkach ze względu na dynamiczny charakter PHP, obejmują:
Biblioteki dokumentacji phpdoc i doxygen wykonują rodzaj analizy kodu. Na przykład Doxygen można skonfigurować tak, aby renderował ładne wykresy dziedziczenia za pomocą graphviz .
Inną opcją jest xhprof , który jest podobny do xdebug, ale lżejszy, co czyni go odpowiednim dla serwerów produkcyjnych. Narzędzie zawiera interfejs oparty na PHP.
źródło
php -l
można odczytać tylko jeden plik wejściowy na raz (to znaczy, że nie zadziała, jeśli to zrobiszphp -l file1.php file2.php
). Zamiast tego musisz użyć-n 1
opcji, która mówi,xargs
aby użyć tylko jednego wiersza wejściowego na proces polecenia. To zamiast tego spowoduje, że uruchomiphp -l file1.php
sięphp -l file2.php
osobno. W tym samym czasie możesz użyć-P <n>
do uruchomienia procesów „n” jednocześnie, aby zrównoważyć wykonanie:find . -name '*.inc' -o -name '*.php' -print0 | xargs -0 -n1 -P10 php -l
find /your/path -name '*.php' -exec php -l {} \;
działa niezawodnie.php -l
) działała, musisz ją ustawić,display_errors = on
wphp.ini
przeciwnym razie pojawi się tylko ogólny komunikat o błędach składniowych, ale nie będzie żadnych szczegółów na temat tego, jakie błędy lub jakie linie.-d
przełącznika. Np.php -l -d display_errors=on $FILENAME
Internetowe strzępki PHP
PHPLint
Sprawdzanie zmiennych jednostkowych . Jednak łącza 1 i 2 już to robią dobrze.
Nie mogę powiedzieć, że intensywnie z nich korzystałem :)
źródło
Dla kompletności - sprawdź także phpCallGraph .
źródło
PHP Mess Detector jest niesamowity i szybki.
źródło
Próbowałem użyć $ php -l i kilku innych narzędzi. Jednak najlepszym z moich doświadczeń (oczywiście YMMV) jest sprawdzenie zestawu narzędzi pfff . Słyszałem o pfff na Quora ( http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool )
Możesz go skompilować i zainstalować. Nie ma ładnych pakietów (w moim miętowym Debianie musiałem najpierw zainstalować zależności libpcre3-dev, ocaml, libcairo-dev, libgtk-3-dev i libgimp2.0-dev), ale powinno być warte instalacji.
Wyniki są zgłaszane jak
źródło
Zobacz CloneDR Semantic Designs, narzędzie do „wykrywania klonowania”, które znajduje kopiowanie / wklejanie / edytowanie kodu. Wyszukuje dokładne i prawie brakujące fragmenty kodu, pomimo białych znaków, komentarzy, a nawet zmiennych nazw. Przykładowy raport z wykrycia dla PHP można znaleźć na stronie wesite. (Jestem autorem).
źródło
IDE NetBeans sprawdza błędy składniowe, nieużywane zmienne i tym podobne. Nie jest zautomatyzowany, ale działa dobrze w przypadku małych i średnich projektów.
źródło
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 udostępnia następujące narzędzia:
źródło
PHP PMD (wykrywacz bałaganu w projekcie) i PHP CPD (wykrywacz wklejania kopii) jako poprzednia część PHPUnit
źródło
Istnieje RIPS - statyczny analizator kodu źródłowego pod kątem luk w skryptach PHP . Źródła RIPS dostępne na SourceForge .
Ze strony RIPS:
źródło
Jest absolutnie nowe narzędzie do analizy kodu statycznego o nazwie PHP Analyzer .
Wśród wielu rodzajów analizy statycznej zapewnia również podstawową funkcję automatycznego ustawiania, patrz dokumentacja .
AKTUALIZACJA: PHP-Analyzer jest już przestarzałym projektem, ale nadal można uzyskać do niego dostęp w starszej gałęzi
źródło
Możesz spróbować skompilować z hiphopem na Facebooku.
Przeprowadza analizę statyczną całego projektu i może być tym, czego szukasz.
https://github.com/facebook/hiphop-php
źródło