PHP, FPM, and Nginx
PHP
We can see we have php 7.0 available out of the box:
sudo apt-cache show php-cli
Instead of using that, we'll start by installing the latest PHP 7.1, via the populate PHP repository.
# Add repository and update local cache of available packages
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update
# Search for packages starting with PHP,
# we'll see php7.1-* packages available
sudo apt-cache search -n php*
# Install PHP-FPM, PHP-CLI and modules
sudo apt-get install -y php7.1-fpm php7.1-cli php7.1-curl php7.1-mysql php7.1-sqlite3 \
php7.1-gd php7.1-xml php7.1-mcrypt php7.1-mbstring php7.1-iconv
Once that's installed, we can see some similar conventions from Nginx (and other software in Debian/Ubuntu).
SAPI
PHP on Debian/Ubuntu is divided by version and Server Application Programming Interface. A SAPI is the context in which PHP is run. The most common are:
- cli - when running on the command lin
- fpm - when fulfilling a web request via fastcgi
- apache2 - when run in Apache's mod-php
Configuration
We can see the configuration split between version and SAPI by checking the file paths within /etc
:
cd /etc/php
ls -lah
> ... 5.6/
> ... 7.0/
> ... 7.1/
cd 7.1
ls -lah
> ... cli/
> ... fpm/
Within each SAPI directory (e.g. cli or fpm), there is a php.ini
file and a conf.d
directory. We can edit php.ini
per SAPI and use symlinks within the conf.d
directory to enable or disable modules per SAPI.
Modules
PHP on Debian/Ubuntu use Symlinks to decide which ones are loaded per SAPI. All module configuration files are located in /etc/php/<version>/mods-available
, and then loaded in via symlinks at /etc/php/<version>/<sapi>/conf.d
.