How to Use PHP Built-in Web Server

In Php on 2~4 minutes
How to Use PHP Built-in Web Server

PHP has its own built-in web server starting from PHP 5.4 and we can use it to quickly run PHP scripts and applications. Let’s see how can we use it for local development and testing purposes. In the end, we explain how to run PHP built-in web server using Docker even if you do not have PHP installed on your PC.

Start PHP Built-in Web Server For Current Directory

Run the following command to start the PHP built-in web server with the address and port. Normally, address can be 127.0.0.1, localhost or 0.0.0.0. Port can be any unused port in the valid range (1~65535).

php -S 127.0.0.1:8000

Start PHP Built-in Web Server For A Document Root

We can use the -t option to specify a different directory as the document root (docroot). In this case, it is the public directory.

php -S 127.0.0.1:8080 -t public

Start PHP Built-in Web Server With A Router File

Usually, when we request a file from a web server, first it tries to find the directory or file specified in the request. However, sometimes we need to override this behaviour by pushing every single request to a specific file which ultimately decides the destination resource to be served.

php -S 127.0.0.1:8080 router.php

Altogether, we can mention the document root and the router file like below.

php -S 127.0.0.1:8080 -t public router.php

Start PHP Built-in Web Server With Docker

For those who do not have PHP installed on their PCs can use Docker to start a PHP built-in web server like the below.

We are using the following options.

  • --rm to remove the container once it is exited.
  • -u $(id -u):$(id -g) to run all scripts as the current user.
  • -v $(pwd):/app to mount the current directory into the /app directory in the container.
  • -p 8080:80 to expose and publish port 80 in the container to port 8080 in the host.
  • --name php to name the container.
  • php:8.1.5-cli-alpine3.15 is the Docker image we are using. Visit Docker Hub to use a different version. Change both document root -t /app and mounting directory /app if you need.
docker run --rm \
    -u $(id -u):$(id -g) \
    -v $(pwd):/app \
    -p 8080:80 \
    --name php \
    php:8.1.5-cli-alpine3.15 php -S 0.0.0.0:80 -t /app

PHP built-in web server is recommended for local development and testing purposes only. Never use it for production environments. Visit https://www.php.net/manual/en/features.commandline.webserver.php to learn more about the PHP built-in web server.