An installation of PHP8 and Phan in a super tiny Alpine Linux Docker image. The image is just 33 MB and runs interactively on the files outside your container, making it easy to statically analyze PHP code.
phan/docker is a fork of cloudflare/docker-phan
Phan requires PHP7.2+ and specific PHP extensions to be installed. These docker images use either php 8 or php 7.
By packaging Phan inside a Docker image, we can separate the runtime and configuration of the tool from your application’s environment and requirements.
The easiest way to use phan/docker
is to create a shell function for “phan”
that makes makes it nearly transparent that phan is running inside Docker.
phan() { docker run -v $PWD:/mnt/src --rm -u "$(id -u):$(id -g)" phanphp/phan:latest $@; return $?; }
(You may replace “latest” with a tagged Phan release such as 5
or 5.2
or 5.2.1
to use a specific version of Phan.)
If you’re just getting started with Phan, you should follow Phan’s excellent Tutorial for Analyzing A Large Sloppy Code Base to setup the initial configuration for your project.
All of Phan’s command line flags can be passed to phan/docker
.
To create an “analysis.txt” in the current directory for further processing
phan -po analysis.txt
To run phan on a project that already has a .phan/config.php
set up (assuming no symlinks)
cd /path/to/project
# short for: docker run -v $PWD:/mnt/src --rm -u "$(id -u):$(id -g)" phanphp/phan:latest
phan
Docker images are built with the build
script based on the awesome building
and testing framework put into place by the docker-alpine
contributors. See BUILD.md for more information.
This aims to be a minimal docker image, and does not include many common PHP modules(extensions).
See https://github.com/phan/phan/wiki/How-To-Use-Stubs#internal-stubs for how to generate stubs from installed extensions and configure phan to use those stubs if the extension is not installed.
Installing the PHP modules may give phan better type information than stubs in some cases.
See examples/installing_extensions
for how to do that.