Подтвердить что ты не робот

Как выполнить статический анализ кода в php?

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

  • неиспользуемые назначения переменных
  • массивы, которые назначаются без предварительной инициализации
  • и, возможно, предупреждения о стиле кода
  • ...
4b9b3361

Ответ 1

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

php -l FILENAME

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

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

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

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

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

Ответ 3

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

Ответ 4

PHP Mess Detector является удивительным и быстрым.

Ответ 5

Я попытался использовать $php -l и пару других инструментов. Однако лучший из моих опытов (YMMV, конечно) scheck из набора инструментов 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.

Результаты сообщаются как

[email protected] ~ $ ~/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.

Ответ 6

Смотрите CloneDR для семантических дизайнов, инструмент обнаружения клонирования, который находит копию/вставку/отредактированный код. Он найдет точные и близкие фрагменты кода ошибки, несмотря на пробелы, комментарии и даже переменные переименования. Пример отчета об обнаружении для PHP можно найти в wesite. (Я автор).

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

С сайта RIPS:

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

Ответ 11

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

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

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

Ответ 12

Обновление: эта ссылка устарела и перенаправляет на спам-сайты

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

Ответ 13

Возможно, вам захочется попробовать компиляцию с помощью hiphop в Facebook.

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

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