Я младший программист, где я работаю. Наш сайт был написан с использованием 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 замораживаться?
Вся помощь очень ценится.
CodeSniffer имеет довольно плохую производительность. Знаете ли вы, сколько LOC в ваших 5000 файлах? Количество файлов не имеет значения, насколько они велики. – EkoostikMartin
Некоторые из файлов довольно массивные. Однако после запуска стандартов в подробном режиме я узнал, что все файлы сравниваются со стандартами.В нашем веб-каталоге есть много видов файлов (картинки, pdf-файлы и другие типы двоичных файлов). Вместо проверки только файлов с PHP, CodeSniffer сравнивал все файлы в структуре с указанными стандартами кодирования. Двоичные файлы заставили CodeSniffer перестать работать. Итак, просмотрев документацию GitHub, я добавил ключ расширения к команде, чтобы направить CodeSniffer только для проверки файлов php и inc. – dqfan2012
Для этого большого количества файлов вы также можете использовать текущую бета-версию (1.5.0RC4), так как она включает полную переписку системы отчетов, чтобы обеспечить большую экономию памяти. Общая производительность проверки будет основана на том, что вы используете, и сколько работы они делают в каждом файле, поэтому я не могу прокомментировать время. Но я могу сказать вам, что PHPCS проверяет файлы PHP по умолчанию. Двоичные файлы, безусловно, игнорируются, если они не имеют расширения .php, .inc, .css или .js. Вы можете подтвердить список файлов, используя аргумент командной строки -v. –