Анализ кода на соответствие версии PHP

Анализ кода на соответствие версии PHP

Категории
Категории
Вячеслав Крампец
  • 2 мин
  • 7773

Задача

Определить совместимость кода с версией PHP

Примеры

  1. Старый сайт на php, надо понять, под какой версией PHP его можно запустить с минимальными правками.
  2. Вышла новая версия PHP. Получить список несоотвествий текущего кода с новой версией.

Решение

Так как эта задача - в области работы над кодом, не будет работать в продакшне, можно использовать доступный код.

  1. Composer, https://getcomposer.org/
    средство управления пакетами
  2. PHP_CodeSniffer, https://github.com/squizlabs/PHP_CodeSniffer
    конфигурируемый анализатор кода PHP / JS / CSS на предмет соответствия стандартам
  3. PHPCompatibility, https://github.com/PHPCompatibility/PHPCompatibility
    расширение для PHP_CodeSniffer для проверки совместимости

Установка

  1. установка composer глобально
    • папка под пакеты
      создание
      mkdir -p /home/user/docker-web-stack/.composer
      переменная окружения в ~/.bashrc
      export COMPOSER_HOME=/home/user/docker-web-stack/.composer
      перечитать файл
      source ~/.bashrc
    • скачать и установить по инструкции, чтоб composer был доступен в командной строке
      ссылка: https://getcomposer.org/doc/00-intro.md
    • проверка
      composer -V -- выведет версию
      и
      composer about -vvv-- выведет операции в г
  2. установка PHP_CodeSniffer глобально
    • установка
      composer global require "squizlabs/php_codesniffer=*"
    • проверка
      phpcs --version -- выведет версию
  3. установка расширения
    • установка
      composer global require "phpcompatibility/php-compatibility=*"
    • указание пути к расширению
      phpcs --config-set installed_paths "$COMPOSER_HOME/vendor/phpcompatibility/php-compatibility
    • проверка, вывести все доступные стандарты
      phpcs -i
      должно вывести что-то вроде этого:
      The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz, Zend and PHPCompatibility
      Т.е. PHPCompatibility должен присутствовать в списке

Примеры использования

На примере проекта ~/docker-web-stack/my-project/.

  1. Проверить текущую папку, только файлы .php на соответствие текущему php установленному в ОС. Результаты - на экран
    phpcs --standard=PHPCompatibility --extensions=php --no-colors ./
  2. Проверить текущую папку, только файлы .php на соответствие текущему php установленному в ОС. Результаты - на экран. Проверка - в три параллельных потока. Быстрее примерно на 20% в локальном тесте.
    phpcs --standard=PHPCompatibility --parallel=3 --extensions=php --no-colors ./
  3. Проверить папку my-awesome-project, только файлы .php на соответствие php 7.4. В два потока. Все ошибки, игнорировать часть предупреждений. Полные результаты - в отчёт, саммари - на экран.

    phpcs --standard=PHPCompatibility --extensions=php --no-colors --parallel=2 \
      --error-severity=1 \
      --warning-severity=7 \
      --runtime-set testVersion 7.4 \
      --report-width=auto \
      --report-full=./phpc.74.txt \
      --report-summary \
      ~/projects/my-awesome-project/
Обновлено 18 января 2022