2013-11-26 7 views
4

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

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

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

Edit: я побежал следующие рекурсивные запросы от корня сайта.

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() вместо среза()). Поэтому я решил установить PHP CodeSniffer.

Во-первых, я установил PEAR: [Я принял все параметры по умолчанию]

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

Далее я установил мерзавца:

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

Далее я установил PHP Code Sniffer

pear install PHP_CodeSniffer 

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

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

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

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

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

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

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

Итак, что заставляет мой PHP-код Sniffer замораживаться?

Вся помощь очень ценится.

+0

CodeSniffer имеет довольно плохую производительность. Знаете ли вы, сколько LOC в ваших 5000 файлах? Количество файлов не имеет значения, насколько они велики. – EkoostikMartin

+0

Некоторые из файлов довольно массивные. Однако после запуска стандартов в подробном режиме я узнал, что все файлы сравниваются со стандартами.В нашем веб-каталоге есть много видов файлов (картинки, pdf-файлы и другие типы двоичных файлов). Вместо проверки только файлов с PHP, CodeSniffer сравнивал все файлы в структуре с указанными стандартами кодирования. Двоичные файлы заставили CodeSniffer перестать работать. Итак, просмотрев документацию GitHub, я добавил ключ расширения к команде, чтобы направить CodeSniffer только для проверки файлов php и inc. – dqfan2012

+0

Для этого большого количества файлов вы также можете использовать текущую бета-версию (1.5.0RC4), так как она включает полную переписку системы отчетов, чтобы обеспечить большую экономию памяти. Общая производительность проверки будет основана на том, что вы используете, и сколько работы они делают в каждом файле, поэтому я не могу прокомментировать время. Но я могу сказать вам, что PHPCS проверяет файлы PHP по умолчанию. Двоичные файлы, безусловно, игнорируются, если они не имеют расширения .php, .inc, .css или .js. Вы можете подтвердить список файлов, используя аргумент командной строки -v. –

ответ

2

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