Need to quickly start a web server to test a PHP application? The PHP interpreter has one built-in! You can use this to rapidly inspect your work without running Apache, NGINX, or a containerization solution.
PHP’s integrated server gets relatively little attention but is quite powerful for development purposes. In this guide, we’ll show how you can use it as an alternative to other micro-servers like Python’s SimpleHTTPServer or the http-server npm package, neither of which can execute PHP scripts.
Using the Built-In Server
The built-in server is a convenience mechanism to help you test PHP sites in environments that lack a fully-fledged HTTP server. It’s available in PHP 5.4 and all later versions. You can run it straight from your working directory without having to set up a virtual host first.
Before using the server, be warned that it’s designed for development use only. The PHP documentation explicitly warns against deploying this server in front of production applications. It’s not sufficiently secure to be exposed on publicly accessible networks.
Starting the Server
The server is started by passing the -S
flag to the php
executable:
$ php -S localhost:8080 [Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
The argument given to the command specifies the server’s listening address. We’ve used port 8080
on localhost
in the example above. Now you can visit http://localhost:8080
in your web browser to access the content in your working directory. Any PHP scripts will be executed automatically when you request them.
You can serve a path that’s outside your working directory by setting the -t
flag when you start the server:
$ php -S localhost:8080 -t /home/$USER/public_docs
The document root will now be /public_docs
within your home folder.
Keep your terminal window open while you’re using the web server. Press Ctrl+C to kill the process once you’re done testing your site. PHP will log each incoming request into your terminal window, including the URI and HTTP method. Any uncaught PHP errors will show up in the logs too.
Enabling Remote Access
Listening on localhost
won’t allow incoming connections from other devices on your network. You can permit remote access by binding to 0.0.0.0
instead:
$ php -S 0.0.0.0:8080
Remember that the server’s not hardened for production use and shouldn’t be publicly exposed. Only allow remote access when it’s absolutely necessary, such as when testing a particular feature on a mobile device. Make sure the port you use isn’t open to the internet.
Request Fallback Matching
PHP will look for index.php
and index.html
files in the active document root when the incoming request lacks a URI component. If neither of these files exists, the server will keep moving up the directory tree, looking for an index in one of your document root’s parents. This means you can unintentionally end up serving content that lies outside the directory you’ve specified. A 404 Not Found status will be issued when the top of the tree is reached without an index file being found.
Requests that include a URI (such as /file
) must …….
Source: https://www.howtogeek.com/devops/how-to-rapidly-test-websites-with-phps-built-in-web-server/