Есть ли статический анализатор кода [например, Lint] для файлов PHP?
Есть ли статический анализатор кода для файлов PHP? Сам бинарный файл может проверять синтаксические ошибки, но я ищу что-то большее, например, неиспользуемые назначения переменных, массивы, которые назначаются без предварительной инициализации, и, возможно, предупреждения стиля кода. Программы с открытым исходным кодом предпочтительнее, но мы можем убедить компанию заплатить за что-то, если это настоятельно рекомендуется.
12 ответов
Запустите php в режиме lint из командной строки, чтобы проверить синтаксис без выполнения:
php -l FILENAME
Статические анализаторы более высокого уровня включают в себя:
- php-sat - требуется http://strategoxt.org/
- PHP_Depend
- PHP_CodeSniffer
- PHP Mess Detector
- PHPStan
- PHP-CS-Fixer
- Phan
Анализаторы нижнего уровня включают в себя:
- PHP_Parser
- token_get_all (примитивная функция)
Анализаторы времени выполнения, которые более полезны для некоторых вещей из-за динамической природы PHP, включают в себя:
- Xdebug имеет покрытие кода и функции трассировки.
- My PHP Tracer Tool использует комбинированный статический / динамический подход, основанный на трассировке функций Xdebug.
Библиотеки документации phpdoc и doxygen выполняют своего рода анализ кода. Например, Doxygen можно настроить для визуализации хороших графиков наследования с помощью graphviz.
Другой вариант - xhprof, похожий на xdebug, но более легкий, что делает его пригодным для производственных серверов. Инструмент включает в себя интерфейс на основе PHP.
Проверка унифицированных переменных. Звено 1 и 2, похоже, уже делают это очень хорошо.
Я не могу сказать, что использовал все это интенсивно, хотя:)
Я пытался использовать $php -l и пару других инструментов. Однако лучший из моих опытов (конечно, YMMV) - это набор инструментов pfff. Я слышал о pfff на Quora ( http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool)
Вы можете скомпилировать и установить его. Нет хороших пакетов (на моем mint Debian мне нужно было сначала установить зависимости libpcre3-dev, ocaml, libcairo-dev, libgtk-3-dev и libgimp2.0-dev), но это должно стоить intsall.
Результаты сообщаются как
rjha@mint ~ $ ~/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.
См. CloneDR от Semantic Designs, инструмент "обнаружения клонов", который находит код для копирования / вставки / редактирования. Он найдет точные и почти пропущенные фрагменты кода, несмотря на пробелы, комментарии и даже переменные переименования. Пример отчета об обнаружении PHP можно найти на сайте. (Я автор).
Среда IDE NetBeans проверяет синтаксические ошибки, неиспользуемые переменные и тому подобное. Это не автоматизировано, но отлично работает для небольших или средних проектов.
Там новый инструмент под названием nWire для PHP. Это плагин для исследования кода для Eclipse PDT и Zend Studio 7.x. Он включает анализ кода в реальном времени для PHP и предоставляет следующие инструменты:
- Визуализация кода - интерактивное графическое представление компонентов и ассоциаций.
- Навигация по коду - уникальный навигационный вид показывает все ассоциации и работает с вами, пока вы пишете или читаете код.
- Быстрый поиск - поиск по мере ввода методов, полей, файлов и т. Д.
PHP PMD (детектор беспорядка проекта) и PHP CPD (детектор копирования-вставки) как прежняя часть PHPUnit
Существует RIPS - статический анализатор исходного кода на наличие уязвимостей в PHP-скриптах. Источники RIPS доступны на SourceForge.
С сайта RIPS:
RIPS - это инструмент, написанный на PHP, для поиска уязвимостей в приложениях PHP с использованием статического анализа кода. Путем токенизации и синтаксического анализа всех файлов исходного кода RIPS может преобразовывать исходный код PHP в программную модель и обнаруживать чувствительные приемники (потенциально уязвимые функции), которые могут быть испорчены пользовательским вводом (под влиянием злонамеренного пользователя) во время выполнения программы. Помимо структурированного вывода обнаруженных уязвимостей RIPS также предлагает интегрированную среду аудита кода для дальнейшего ручного анализа.
Существует абсолютно новый инструмент для статического анализа кода, который называется PHP Analyzer.
Среди многих типов статического анализа он также предоставляет базовые функции автофиксации, см. Документацию.
ОБНОВЛЕНИЕ: PHP-Analyzer теперь устарел проект, но вы все еще можете получить к нему доступ в устаревшей ветке
Кроме того, PHP Compiler, возможно, стоит попробовать. Его основная функция - создавать двоичные файлы PHP, но у него есть некоторые возможности анализа.
Вы можете попробовать компилировать с хип-хопом Facebook.
Он выполняет статический анализ всего проекта и может быть тем, что вы ищете.