Como instalar PHP 5.6, PHP 7.2, PHP 7.4, PHP 8.1 com Nginx no Ubuntu 20.04LTS
Instalando os repositórios
$ sudo add-apt-repository ppa:ondrej/php
$ sudo add-apt-repository ppa:ondrej/nginx
$ sudo apt update && sudo apt upgrade -y
Instalando o PHP 5.6 + Nginx
$ sudo apt install php5.6-cli php5.6-common php5.6-curl php5.6-dev php5.6-fpm php5.6-gd php5.6-opcache php5.6-readline php5.6-gnupg php5.6-intl php5.6-json php5.6-mbstring php5.6-mysql php5.6-ssh2 php5.6-tidy php5.6-xml php5.6-xdebug php5.6-zip php5.6-apcu dh-php php5.6-memcached php5.6-bcmath memcached php-pear nginx nginx-extras
Instalando o PHP 7.2 + Nginx
$ sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-dev php7.2-fpm php7.2-gd php7.2-opcache php7.2-readline php7.2-gnupg php7.2-intl php7.2-json php7.2-mbstring php7.2-mysql php7.2-ssh2 php7.2-tidy php7.2-xml php7.2-xdebug php7.2-zip php7.2-apcu-bc php7.2-apcu memcached php7.2-memcached php7.2-bcmath php-pear nginx nginx-extras
Instalando o PHP 7.4 + Nginx
$ sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-curl php7.4-dev php7.4-gd php7.4-opcache php7.4-readline php7.4-gnupg php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-ssh2 php7.4-tidy php7.4-xml php7.4-xdebug php7.4-zip php7.4-apcu-bc php7.4-apcu memcached php7.4-memcached php7.4-bcmath php-pear nginx nginx-extras
Instalando o PHP 8.1 + Nginx
$ sudo apt install php8.1-cli php8.1-common php8.1-curl php8.1-dev php8.1-fpm php8.1-gd php8.1-opcache php8.1-readline php8.1-gnupg php8.1-intl php8.1-mbstring php8.1-mysql php8.1-ssh2 php8.1-tidy php8.1-xml php8.1-xdebug php8.1-zip php8.1-apcu php-pear memcached php8.1-memcached php8.1-bcmath nginx nginx-extras
* php8.1-json não existe porque a extensão JSON está incluída no PHP8 ( https://php.watch/versions/8.0/ext-json )
Alternando entre as versões PHP instaladas no ambiente Linux
$ sudo update-alternatives --config php
O comando acima permite gerenciar as várias versões do PHP instalados em seu ambiente. Teste:
$ php --version
Alternando entre as versões PHP instaladas no Nginx
Para subir um host com o PHP 5.6, experimente: $ sudo vim /etc/nginx/sites-available/php56.localhost
# PHP 5.6
server {
listen 80 default_server;
root /home/rodrigo/Projects/php56;
index index.php;
server_name php56.local;
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_read_timeout 600;
}
}
Para subir um host com o PHP 7.2, experimente: $ sudo vim /etc/nginx/sites-available/php72.localhost
# PHP 7.2
server {
listen 80 default_server;
root /home/rodrigo/Projects/php72;
index index.php;
server_name php72.local;
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_read_timeout 600;
}
# enable slim directory
location /api/ {
try_files $uri /api/index.php$is_args$args;
}
}
Para subir um host com o PHP 7.4, experimente: $ sudo vim /etc/nginx/sites-available/php74.localhost
# PHP 7.4
server {
listen 80 default_server;
root /home/rodrigo/Projects/php74;
index index.php;
server_name php74.local;
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_read_timeout 600;
}
# enable slim directory
location /api/ {
try_files $uri /api/index.php$is_args$args;
}
}
Para subir um host com o PHP 8.1, experimente: $ sudo vim /etc/nginx/sites-available/php81.localhost
# PHP 8.1
server {
listen 80 default_server;
root /home/rodrigo/Projects/php81;
index index.php;
server_name php81.local;
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_read_timeout 600;
}
# enable slim directory
location /api/ {
try_files $uri /api/index.php$is_args$args;
}
}
Reinicie o Nginx com o seguinte comando:
$ sudo systemctl restart nginx php5.6-fpm php7.2-fpm php7.4-fpm php8.1-fpm
Para alternar entre as versões do PHP no shell (para VSCode por exemplo):
$ sudo update-alternatives --config php
NOTAS:
Lembre-se de adicionar as referências para os nomes php56.local, php72.local, php74.local e php81.local apontando para 127.0.0.1 em /etc/hosts.
Se utilizar o memcached para as sessions, configurar php.ini conforme instruções: https://www.php.net/manual/pt_BR/memcached.sessions.php#99646 e o mesmo se aplica ao Redis.
No Nginx, a versão do PHP que muda de acordo com o fastcgi_pass e a versão do fpm indicado.
Se a versão do PHP para seu VSCode estiver errada, lembre-se de usar o update-alternatives, pois o VSCode faz uso do PHP default instalado em seu ambiente.
Comentários