Я бы хотел провести строгую проверку синтаксиса:

$ php -d error_reporting=32767 -l test.php

Для всех файлов php внутри моего проекта в Travis CI.

Я пытался использовать find , но он всегда просто возвращает 0, даже если команда для флага exec не работает

$ find . -type f -name "*.php" -exec php -d error_reporting=32767 -l {} \;
PHP Parse error:  syntax error, unexpected end of file, expecting ',' or ';' in ./test.php on line 3
$ echo $?
0
1
onnimonni 20 Июл 2017 в 14:32

1 ответ

Лучший ответ

Я решил это, проверив, возвращает ли find + php что-нибудь в STDERR.

before_script:
  - '! find . -type f -name "*.php" -exec php -d error_reporting=32767 -l {} \; 2>&1 >&- | grep "^"'

Как это работает? Добавление:

2>&1 >&-

После любой команды удаляет STDOUT и перенаправляет STDERR на STDOUT.

Затем мы можем просто проверить, содержит ли вывод какие-либо строки с помощью grep :

| grep "^"

Затем, поскольку grep возвращает 0 , если он что-то находит, и 1 , если он ничего не находит, нам нужно отрицать конечный результат, используя восклицательный знак в начале этой команды. В противном случае эта команда не сработает, когда все в порядке, и будет успешной, когда что-то не так.

4
onnimonni 20 Июл 2017 в 16:45