I am trying to parse a recursive directory of PHP files using the built in PHP linter, which works like this:
$ php -l good.php No syntax errors detected in good.php $ php -l bad.php PHP Parse error: syntax error, unexpected ''foo'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in bad.php on line 3 Errors parsing bad.php We can see that files which pass linting output a line containing No syntax errors and those which fail linting output a line containing Errors parsing.
I see that I have 12147 PHP files recursively in the current directory, however the PHP linter is only outputting seven lines:
$ find . -name \*.php -print0 | xargs -0 ls -l | wc -l 12147 $ find . -name \*.php -print0 | xargs -0 php -l | wc -l 7 As there were only 7 files parsed by PHP, I can use my head with ls to find some files which have not been parsed:
$ find . -name \*.php -print0 | xargs -0 ls -l | head -rw-r--r-- 1 dotan dotan 1927 Jan 13 10:13 ./bootstrap/app.php -rw-r--r-- 1 dotan dotan 1076 Jan 13 10:13 ./bootstrap/autoload.php -rw-rw-r-- 1 dotan dotan 25620 Mar 12 12:29 ./bootstrap/cache/services.php -rw-r--r-- 1 dotan dotan 2493 Jan 13 10:13 ./bootstrap/paths.php -rwxrwxr-x 1 dotan dotan 20008 Mar 12 12:30 ./config/app.php -rw-r--r-- 1 dotan dotan 3304 Jan 13 10:13 ./config/auth.php -rw-r--r-- 1 dotan dotan 1819 Jan 13 10:13 ./config/cache.php -rw-r--r-- 1 dotan dotan 3751 Jan 13 10:13 ./config/cartalyst.sentinel-addons.social.php -rw-r--r-- 1 dotan dotan 6849 Jan 13 10:13 ./config/cartalyst.sentinel.php -rw-r--r-- 1 dotan dotan 1020 Jan 13 10:13 ./config/compile.php xargs: ls: terminated by signal 13 $ find . -name \*.php -print0 | xargs -0 php -l No syntax errors detected in ./bootstrap/paths.php No syntax errors detected in ./vendor/watson/validating/src/ValidatingTrait.php No syntax errors detected in ./vendor/giggsey/libphonenumber-for-php/src/libphonenumber/data/PhoneNumberMetadata_SI.php No syntax errors detected in ./vendor/php-vcr/php-vcr/src/VCR/Event/BeforePlaybackEvent.php No syntax errors detected in ./vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php No syntax errors detected in ./resources/views/emails/appointment/updated/body.blade.php No syntax errors detected in ./app/WL/Modules/Location/Commands/RemoveClientLocationCommand.php Yet, when I try to parse one of those files I see that it does produce the expected output (either passing or failing parsing):
$ php -l ./bootstrap/cache/services.php No syntax errors detected in ./bootstrap/cache/services.php I've checked that neither passing nor failing linting is printing the expected lines to stderr:
$ php -l good.php | grep rr No syntax errors detected in good.php $ php -l bad.php | grep rr PHP Parse error: syntax error, unexpected ''foo'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in bad.php on line 3 Errors parsing bad.php What should I check now? My end goal is to lint all the files, then grep for Error parsing to fix those issues.
php -lcommand take multiple arguments with the syntaxphp -l file1 file2 file3?xargswould be passing the results offindin batches.xargswas batching. Learn something every day!