Вопрос или проблема
Я хотел бы использовать php -l
, чтобы возвращать только ошибки, а не сообщения No syntax errors detected
. Это возможно?
С помощью некоторых умных поисков в Google мне удалось найти этот набор команд:
find . -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" )
Этот скрипт проходит через все файлы в текущей папке и выводит только ошибки, и вызывает сбой сборки CI, если произошла ошибка.
Источник: https://gist.github.com/mathiasverraes/3096500#gistcomment-2570105
Попробуйте это:
find . -type f -iname '*.php' -exec php -l {} \; | grep -v "No syntax errors detected"
Ответ или решение
Устранение сообщений "No syntax errors detected" при линтинге PHP
Если вы работаете с PHP-кодом и хотите проверить его на наличие синтаксических ошибок, стандартная команда php -l
будет полезной. Однако, часто возникает потребность не видеть сообщения о том, что ошибок нет, для более компактного и эффективного вывода. В этой статье мы обсудим, как настроить линтинг для PHP, чтобы получать только ошибки.
Зачем это нужно?
При автоматизации процессов, таких как непрерывная интеграция (CI), важно минимизировать "шум" в выводе. Сообщение "No syntax errors detected" не приносит никакой полезной информации, и его можно безопасно игнорировать. Оптимизированный вывод упрощает анализ результатов проверки кода, особенно если вы работаете с большим количеством файлов.
Решение
Можно использовать команду find
, чтобы рекурсивно искать все PHP-файлы в каталоге, а затем передать их на линтинг с помощью php -l
. Упрощенный подход для фильтрации ненужного вывода можно реализовать с помощью следующей команды:
find . -type f -iname '*.php' -exec php -l {} \; | grep -v "No syntax errors detected"
Давайте разберем эту команду подробнее:
find . -type f -iname '*.php'
— эта команда ищет все файлы с расширением.php
в текущем каталоге и всех подкаталогах независимо от регистра.-exec php -l {} \;
— для каждого найденного файла запускается командаphp -l
, которая проверяет код на наличие синтаксических ошибок.| grep -v "No syntax errors detected"
— этот фильтр удаляет все строки, содержащие указанное сообщение, оставляя только те, которые указывают на наличие ошибок.
Альтернативный метод
Вы также можете использовать следующую команду, которая применяет конструкцию xargs
, чтобы выводить ошибки параллельно:
find . -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | grep -v "No syntax errors detected"
Здесь:
-print0
и-0
используются для корректной обработки имен файлов, содержащих пробелы и специальные символы.-n1
указывает на то, что нужно передавать по одному аргументу в каждую командуphp -l
.-P4
позволяет выполнять команду параллельно для ускорения обработки.
Заключение
Оптимизация вывода линтинга PHP игнорируя ненужные сообщения делает проверку кода более эффективной и удобной, особенно в контексте современных практик разработки. Выбор подхода зависит от ваших потребностей: если необходимо обрабатывать файлы параллельно, используйте xargs
, а если для вас важен простой вариант — воспользуйтесь -exec
.
Такая настройка не только помогает улучшить читаемость кода, но и способствует более качественному программированию, что в конечном итоге повышает надежность вашего проекта.