Docker image providing static analysis tools for PHP.
The list of available tools and the installer are actually managed in the jakzal/toolbox repository.
Docker hub repository: https://hub.docker.com/r/jakzal/phpqa/
latest,debian(Dockerfile)1.113.9,1.113,1.113.9-debian,1.113-debian(Dockerfile)1.113.9-php8.2,1.113-php8.2,php8.2-debian,php8.2(Dockerfile)1.113.9-php8.3,1.113-php8.3,php8.3-debian,php8.3(Dockerfile)1.113.9-php8.4,1.113-php8.4,php8.4-debian,php8.4(Dockerfile)
alpine(Dockerfile)1.113.9-alpine,1.113-alpine, (Dockerfile)1.113.9-php8.2-alpine,1.113-php8.2-alpine,php8.2-alpine(Dockerfile)1.113.9-php8.3-alpine,1.113-php8.3-alpine,php8.3-alpine(Dockerfile)1.113.9-php8.4-alpine,1.113-php8.4-alpine,php8.4-alpine(Dockerfile)
Updated daily: latest, debian, alpine, php8.4, php8.4-alpine, etc.
Updated on patch version change: 1.61, 1.61-php8.4, 1.61-php8.4-alpine, etc.
Never updated: 1.61.0, 1.61.0-php8.4, 1.61.0-php8.4-alpine, etc.
These are the latest tags for PHP versions that are no longer supported:
1.105.0-php8.1,1.105-php8.1,php8.1-debian,php8.1(Dockerfile)1.105.0-php8.1-alpine,1.105-php8.1-alpine,php8.1-alpine(Dockerfile)1.92.7-php8.0,1.93-php8.0,php8.0-debian,php8.0(Dockerfile)1.92.7-php8.0-alpine,1.93-php8.0-alpine,php8.0-alpine(Dockerfile)1.80.0-php7.4,1.80-php7.4,php7.4-debian,php7.4(Dockerfile)1.80.0-php7.4-alpine,1.80-php7.4-alpine,php7.4-alpine(Dockerfile)1.61.2-php7.3,1.61-php7.3,php7.3-debian,php7.3(debian/Dockerfile)1.61.2-php7.3-alpine,1.61-php7.3-alpine,php7.3-alpine(alpine/Dockerfile)1.44.0-php7.2,1.44-php7.2,php7.2(7.2/debian/Dockerfile)1.44.0-php7.2-alpine,1.44-php7.2-alpine,php7.2-alpine(7.2/alpine/Dockerfile)1.26.0-php7.1,1.26-php7.1,php7.1(7.1/debian/Dockerfile)1.26.0-php7.1-alpine,1.26-php7.1-alpine,php7.1-alpine(7.1/alpine/Dockerfile)
Some tools are not included in the docker image, to use them refer to their documentation:
- exakat - a real time PHP static analyser
| Name | Summary |
|---|---|
| analyze | Visualizes metrics and source code |
| box-legacy | Legacy version of box |
| design-pattern | Detects design patterns |
| parallel-lint | Checks PHP file syntax |
| pest | The elegant PHP Testing Framework |
| php-coupling-detector | Detects code coupling issues |
| php-formatter | Custom coding standards fixer |
| phpcf | Finds usage of deprecated features |
| phpda | Generates dependency graphs |
| phpdoc-to-typehint | Automatically adds type hints and return types based on PHPDocs |
| phpstan-exception-rules | PHPStan rules for checked and unchecked exceptions |
| phpstan-localheinz-rules | Additional rules for PHPstan |
| security-checker | Checks composer dependencies for known security vulnerabilities |
| testability | Analyses and reports testability issues of a php codebase |
Pull the image:
docker pull jakzal/phpqaThe default command will list available tools:
docker run -it --rm jakzal/phpqaTo run the selected tool inside the container, you'll need to mount
the project directory on the container with -v "$(pwd):/project".
Some tools like to write to the /tmp directory (like PHPStan, or Behat in some cases), therefore it's often useful
to share it between docker runs, i.e. with -v "$(pwd)/tmp-phpqa:/tmp".
If you want to be able to interrupt the selected tool if it takes too much time to complete, you can use the
--init option. Please refer to the docker run documentation for more information.
docker run --init -it --rm -v "$(pwd):/project" -v "$(pwd)/tmp-phpqa:/tmp" -w /project jakzal/phpqa phpstan analyse srcYou might want to tweak this command to your needs and create an alias for convenience:
alias phpqa='docker run --init -it --rm -v "$(pwd):/project" -v "$(pwd)/tmp-phpqa:/tmp" -w /project jakzal/phpqa:alpine'Add it to your ~/.bashrc so it's defined every time you start a new terminal session.
Now the command becomes a lot simpler:
phpqa phpstan analyse srcgit clone https://github.com/jakzal/phpqa.git
cd phpqa
make build-debianTo build the alpine version:
make build-alpine
Please check out the cookbook for further tips & tricks.
Please read the Contributing guide to learn about contributing to this project. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.