Почему PHP CodeSniffer зависает?

Я младший программист, где работаю. Наш веб-сайт был написан с использованием PHP 4. Мы переходим с PHP 4 на PHP 5.3. Примерно 5000 файлов PHP находятся примерно в 595 каталогах. Итак, как вы понимаете, масштаб этого проекта довольно огромен.

Мы используем Subversion для контроля версий. У меня две отдельные кассы. У меня есть две виртуальные машины, которые действуют как отдельные веб-хосты - один стек имитирует наш фактический веб-сервер (CentOS 4, PHP4 и т. Д.), А другой - стек PHP 5.3 (Ubuntu 12.04 LTS).

Я потратил время, чтобы проверить файлы на наличие основных синтаксических ошибок, используя следующие команды:

Изменить: я выполнил следующие рекурсивные поиски из корня веб-сайта.

find ./ -type f -name \*.php -exec php -l {} \; < ~/php5_basic_syntax_assessment.txt
find ./ -type f -name \*.inc -exec php -l {} \; < ~/php5_basic_syntax_inc_assessment.txt

Я понимаю, что использование php -l для проверки базового синтаксиса не показывает устаревшие структуры / функции кода и не дает предупреждений (IE: используйте preg_slice () вместо slice ()). Поэтому я решил установить PHP CodeSniffer.

Сначала я установил PEAR: [я принял все параметры по умолчанию]

cd ~/
mkdir pear
cd pear
wget http://pear.php.net/go-pear.phar
php go-pear.phar

Затем я установил git:

cd ~/
sudo apt-get update
sudo apt-get install git

Затем я установил PHP Code Sniffer.

pear install PHP_CodeSniffer

Наконец, я установил следующие стандарты совместимости PHP 5.3 для анализатора кода PHP:

git clone git://github.com/wimg/PHP53Compat_CodeSniffer.git PHP53Compatibility

Я сделал все вышеперечисленное, чтобы автоматически оценить файлы PHP размером 5K. Было бы чрезвычайно утомительно и долго просматривать каждый файл, чтобы убедиться, что он вручную соответствует стандартам кодирования PHP 5.3.

Наконец, вот команда, которую я использовал для запуска анализатора кода PHP:

phpcs --standard=/home/my_user_name/PHP53Compatibility -p --report-file=/home/my_user_name/php53_assessment.txt /path/to/web/root

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

phpcs -p --report-file=/home/my_user_name/php53_assessment.txt /path/to/web/root

В любом случае отчеты зависают на одном и том же месте. Я не спал более 24 часов. Я ждал 18 часов, прежде чем остановить первый запуск с помощью CTRL + C. Второй все еще работает и работает уже около полутора часов.

Итак, что вызывает зависание моего анализатора кода PHP?

Любая помощь очень ценится.


person dqfan2012    schedule 26.11.2013    source источник
comment
CodeSniffer имеет довольно плохую производительность. Знаете ли вы, сколько примерно LOC находится в ваших 5000 файлах? Количество файлов не так важно, как их размер.   -  person EkoostikMartin    schedule 26.11.2013
comment
Некоторые файлы довольно большие. Однако после запуска стандартов в подробном режиме я узнал, что все файлы сравнивались со стандартами. В нашем веб-каталоге есть много типов файлов (изображения, PDF-файлы и другие типы двоичных файлов). Вместо того, чтобы исследовать только файлы с PHP, CodeSniffer сравнивал все файлы в структуре с указанными стандартами кодирования. Двоичные файлы привели к тому, что CodeSniffer перестал работать. Итак, после просмотра документации GitHub, я добавил к команде переключатель расширений, чтобы указать CodeSniffer проверять только файлы php и inc.   -  person dqfan2012    schedule 26.11.2013
comment
Для такого количества файлов вы также можете использовать текущую бета-версию (1.5.0RC4), поскольку она включает в себя полную переработку системы отчетности для обеспечения значительной экономии памяти. Общая производительность проверки будет зависеть от того, какие сниффы вы используете и сколько работы они делают с каждым файлом, поэтому я не могу реально прокомментировать затраченное время. Но я могу вам сказать, что PHPCS по умолчанию проверяет только файлы PHP. Двоичные файлы определенно игнорируются, если они не имеют расширения .php, .inc, .css или .js. Вы можете подтвердить список файлов, используя аргумент командной строки -v.   -  person Greg Sherwood    schedule 27.11.2013


Ответы (1)


Немного поздно, но я столкнулся с той же проблемой. Ограничьте файлы только файлами PHP: phpcs -p -- ./**/*.php

person Fabian Marz    schedule 25.11.2015