Есть ли статический анализатор кода для файлов PHP?

Есть ли статический анализатор кода для файлов PHP? Сам двоичный файл может проверять наличие синтаксических ошибок, но я ищу что-то, что делает больше, например, неиспользуемые назначения переменных, массивы, которые назначаются без первоначальной инициализации и, возможно, предупреждения стиля кода. Программы с открытым исходным кодом были бы предпочтительнее, но мы могли бы убедить компанию заплатить за что-то, если это настоятельно рекомендуется.

    Запустите php в lint-mode из командной строки, чтобы проверить синтаксис без выполнения:

    • php -l FILENAME

    Статические анализаторы более высокого уровня включают:

    Анализаторы нижнего уровня включают:

    • PHP_Parser
    • token_get_all (примитивная функция)

    Анализаторы времени работы, которые более полезны для некоторых вещей из-за динамической природы PHP, включают:

    • Xdebug имеет покрытие кода и функции .
    • Мой PHP Tracer Tool использует комбинированный статический / динамический подход, основанный на трассировке функции Xdebug.

    Библиотеки документации phpdoc и doxygen выполняют своего рода анализ кода. Например, Doxygen может быть сконфигурирован так, чтобы отображать красивые графики наследования с помощью graphviz .

    Другим вариантом является xhprof , который похож на xdebug, но легче, что делает его подходящим для производственных серверов. Этот инструмент включает в себя интерфейс на основе PHP.

    Интернет-личность PHP

    PHPLint

    Проверка юниллизированных переменных . Link 1 и 2 уже, похоже, делают это просто отлично.

    Я не могу сказать, что я использовал любой из них интенсивно, хотя 🙂

    Для полноты – также проверьте phpCallGraph .

    PHP Mess Detector – потрясающий и быстрый.

    Я попытался использовать $ 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 можно найти в wesite. (Я автор).

    Средство IDE NetBeans проверяет наличие синтаксических ошибок, неиспользуемых переменных и т. Д. Он не автоматизирован, но отлично работает для небольших или средних проектов.

    Там появился новый инструмент nWire для PHP . Это плагин для разработки кода для Eclipse PDT и Zend Studio 7.x. Он позволяет анализировать код в реальном времени для PHP и предоставляет следующие инструменты:

    • Визуализация кода – интерактивное графическое представление компонентов и ассоциаций.
    • Навигация по коду – уникальный навигационный вид показывает все ассоциации и работает с вами во время написания или чтения кода.
    • Быстрый поиск – поиск по типу для методов, полей, файлов и т. Д.

    PHP PMD (детектор ошибок проекта) и PHP CPD (детектор копирования пасты) как бывшая часть PHPUnit

    Кроме того, компилятор PHP, возможно, стоит попробовать. Его основная функция – создавать двоичные файлы PHP, но у нее есть некоторые возможности анализа.

    RIPS – статический анализатор исходного кода для уязвимостей в PHP-скриптах . Источники RIPS доступны в SourceForge .

    С сайта RIPS:

    RIPS – это инструмент, написанный на PHP для поиска уязвимостей в PHP-приложениях с использованием статического анализа кода. Благодаря маркеру и анализу всех файлов исходного кода RIPS может преобразовать исходный код PHP в программную модель и обнаруживать уязвимые приемники (потенциально уязвимые функции), которые могут быть испорчены пользовательской (в зависимости от вредоносного пользователя) во время потока программы. Помимо структурированного вывода найденных уязвимостей, RIPS также предлагает интегрированную систему анализа кода для дальнейшего ручного анализа.

    Существует абсолютно новый инструмент для статического анализа кода, называемого PHP Analyzer .

    Среди многих типов статического анализа он также обеспечивает базовые функции автоматической фиксации, см. Документацию .

    UPDATE: PHP-Analyzer теперь устарел, но вы по-прежнему можете получить доступ к нему в старой ветке

    Вы можете попробовать скомпилировать его с помощью хип-хопа Facebook.

    Он выполняет статический анализ всего проекта и может быть тем, что вы ищете.

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