Есть ли статический анализатор кода [например, Lint] для файлов PHP?

412

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

  • 0
    Связанный веб-сайт: набор инструментов обеспечения качества PHP (phpqatools.org) и другой статический инструмент - PHP_CompatInfo .
  • 48
    Правильно: закрыто SO, когда явно такой ответ невероятно полезен.
Показать ещё 6 комментариев
Теги:
lint

13 ответов

349
Лучший ответ

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

php -l FILENAME

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

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

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

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

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

  • 0
    PHP_CodeSniffer прост в установке и использовании. :)
  • 0
    Я знаю, что это ответ на вопрос, но все же, используя php -l например: find /your/path -name '*.php' | xargs -r php -l не работает надежно. Он часто пропускает файлы с синтаксическими ошибками в них.
Показать ещё 14 комментариев
34

Онлайн-листинг PHP

PHPLint

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

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

  • 0
    Его ответ сделал мой сегодняшний день великолепным! +1
24

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

23

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

  • 7
    Спасибо! Я искал потрясающий. На самом деле я отказываюсь использовать что-либо, кроме потрясающих инструментов. :)
  • 1
    Это начало, и похоже, что Netbeans использует его, но я бы не стал полностью этому доверять. Некоторые из его опций просто нечетны («предупреждают» вас, если вы используете оператор else ??), и в его обнаружениях есть множество больших ошибок, которые даже не получили ответа от разработчиков: github.com/phpmd / phpmd / вопросы
Показать ещё 1 комментарий
15

Я попытался использовать $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.

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

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.
  • 0
    Спасибо. Он продолжает жаловаться на наш динамический импорт, но другие его возможности пока выглядят неплохо. Мне также нужно было установить binutils-gold, а scheck нужно было установить по произвольному пути, но теперь это работает.
  • 1
    @eswald Сейчас я являюсь конвертером php-детектора (phpmd). Из всех инструментов, которые я пробовал до сих пор (сниффер php-кода, scheck, php -l, phpmd), IMHO, phpmd лучше всего подходит для моего случая.
Показать ещё 5 комментариев
13

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

  • 5
    +1 за "я автор"
  • 1
    Глядя на сайт, это кажется невероятным инструментом. Я буду смотреть поближе позже! Спасибо за ссылку (+1 также для "Я автор")
Показать ещё 1 комментарий
7

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

6

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

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

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

С сайта RIPS:

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

  • 0
    RIPS - это полумертвый проект, и он работает только с не-OOP php-кодом.
4

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

3

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

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

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

2

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

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

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

2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню