`phplint` is a tool that can speed up linting of php files by running several lint processes at once.

Fund package maintenance!

Installs: 3 647 020

Dependents: 551

Suggesters: 0

Security: 0

Stars: 837

Watchers: 20

Forks: 80

Open Issues: 1

5.1.0 2022-04-19 03:40 UTC


`phplint` is a tool that can speed up linting of php files by running several lint processes at once.

🚨 There are two better packages for syntax detection and static analysis: Psalm and PHPStan, recently my work has started to get busier and I won't have much time to maintain this project, if you are interested in maintaining it please raise an issue, Thanks.

artboard 1

Release Status Latest Stable Version Total Downloads Latest Unstable Version License Scrutinizer Code Quality FOSSA Status

Sponsor me



  • PHP >= 8.1
  • Composer >= 2.0

if you are using php 7.0, please refer the 7.4 branch. if you are using php 8.0, please refer the 8.0 branch.

Locally, if you have PHP

$ composer require overtrue/phplint:^5.0 --dev -vvv

Locally, if you only have Docker

docker pull overtrue/phplint:8.1



  phplint [options] [--] [<path>]...

  path                               Path to file or directory to lint.

      --exclude=EXCLUDE              Path to file or directory to exclude from linting (multiple values allowed)
      --extensions=EXTENSIONS        Check only files with selected extensions (default: php)
  -j, --jobs=JOBS                    Number of parallel jobs to run (default: 5)
  -c, --configuration=CONFIGURATION  Read configuration from config file (default: ./.phplint.yml).
      --no-configuration             Ignore default configuration file (default: ./.phplint.yml).
      --no-cache                     Ignore cached data.
      --cache=CACHE                  Path to the cache file.
      --json[=JSON]                  Output JSON results to a file.
      --xml[=XML]                    Output JUnit XML results to a file.
  -w, --warning                      Also show warnings
  -h, --help                         Display this help message
  -q, --quiet                        Do not output any message
  -V, --version                      Display this application version
      --ansi                         Force ANSI output
      --no-ansi                      Disable ANSI output
  -n, --no-interaction               Do not ask any interactive question
  -v|vv|vvv, --verbose               Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
 Lint something


$ ./vendor/bin/phplint ./ --exclude=vendor

You can also define configuration as a file .phplint.yml:

path: ./
jobs: 10
cache: build/phplint.cache
  - php
  - vendor
warning: false
$ ./vendor/bin/phplint

By default, the command will read configuration from file .phplint.yml of path specified, you can custom the filename by option: --configuration=FILENAME or -c FILENAME;

If you want to disable the config file, you can add option --no-configuration.

Docker cli

docker run --rm -t -v "${PWD}":/workdir overtrue/phplint ./  --exclude=vendor

Please mount the code directory to /workdir in the container.


use Overtrue\PHPLint\Linter;

$path = __DIR__ .'/app';
$exclude = ['vendor'];
$extensions = ['php'];
$warnings = true;

$linter = new Linter($path, $exclude, $extensions, $warnings);

// get errors
$errors = $linter->lint();

// [
//    '/path/to/foo.php' => [
//          'error' => "unexpected '$key' (T_VARIABLE)",
//          'line' => 168,
//          'file' => '/path/to/foo.php',
//      ],
//    '/path/to/bar.php' => [
//          'error' => "unexpected 'class' (T_CLASS), expecting ',' or ';'",
//          'line' => 28,
//          'file' => '/path/to/bar.php',
//      ],
// ]

GitHub Actions

uses: overtrue/phplint@8.1
  path: .
  options: --exclude=*.log

Other CI/CD (f.e. Bitbucket Pipelines, GitLab CI)

Run this command using overtrue/phplint:8.1 Docker image:

/root/.composer/vendor/bin/phplint ./ --exclude=vendor


Not all linting problems are errors, PHP also has warnings, for example when using a continue statement within a switch case. By default, these errors are not reported, but you can turn this on with the warning cli flag, or by setting the warning to true in the configuration.

❤️ Sponsor me

Sponsor me

如果你喜欢我的项目并想支持它,点击这里 ❤️

Project supported by JetBrains

Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.

PHP 扩展包开发

想知道如何从零开始构建 PHP 扩展包?

请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》