Instalación de la última versión desde cero
A continuación tenemos los comandos necesarios para instalar desde cero la ultima versión de PHP:
Configurar el sistema para poder instalar la versión mas reciente de PHP
sudo apt install apt-transport-https
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update
Instalar PHP 8.3
sudo apt install php8.3-fpm -y
Instalar los módulos mas comunes de PHP 8.3
sudo apt install php8.3-common php8.3-zip php8.3-curl php8.3-xml php8.3-xmlrpc php8.3-mysql php8.3-pdo php8.3-gd php8.3-imagick php8.3-ldap php8.3-imap php8.3-mbstring php8.3-intl php8.3-cli php8.3-tidy php8.3-bcmath php8.3-opcache php8.3-pgsql php8.3-ds -y
Instalar otras versiones de PHP
Para instalar cualquier otra version de PHP solo sería necesario ejecutar el comando de instalación de php y el comando de sus módulos, por ejemplo veamos los comandos para instalar la versión 7.3:
sudo apt install php7.3-fpm -y
sudo apt install php7.3-common php7.3-zip php7.3-curl php7.3-xml php7.3-xmlrpc php7.3-mysql php7.3-pdo php7.3-gd php7.3-imagick php7.3-ldap php7.3-imap php7.3-mbstring php7.3-intl php7.3-cli php7.3-tidy php7.3-bcmath php7.3-opcache php7.3-pgsql -y
Eliminar alguna versión de PHP del sistema
Cuando tengamos alguna versión de PHP que no este en uso podemos usar el comando de Linux purge para eliminar por completo esa versión de PHP del sistema junto con todos sus módulos
Desinstalar PHP 8.1 y todos sus módulos
sudo apt purge php8.1\* -y
Desinstalar cualquier versión de PHP 7
sudo apt purge php7.\* -y
Corroborar el estado de PHP en el servidor
Una vez instalada una version de PHP un proceso para dicha version debe inicializarse en nuestro servidor, para corroborar que el proceso de PHP que nos interesa este funcionando correctamente usamos el comando de Linux service y preguntaremos por el estado del proceso de PHP FPM de la versión que nos interesa:
sudo service php8.3-fpm status
En caso de que el proceso este funcionando correctamente deberíamos ver en la consola información como la siguiente:
● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-10-10 16:35:23 UTC; 3 weeks 6 days ago
Docs: man:php-fpm8.3(8)
Main PID: 463 (php-fpm8.3)
Status: "Processes active: 0, idle: 3, Requests: 58674, slow: 0, Traffic: 0.00req/sec"
Tasks: 4 (limit: 1107)
Memory: 186.4M
CPU: 46min 6.041s
CGroup: /system.slice/php8.3-fpm.service
├─ 463 "php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)"
├─118885 "php-fpm: pool www"
├─122764 "php-fpm: pool www"
└─135594 "php-fpm: pool www"
Oct 10 16:35:22 ip-172-31-46-146 systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...
Oct 10 16:35:23 ip-172-31-46-146 systemd[1]: Started php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager.
En caso de que no este funcionando deberíamos intentar ejecutar el proceso con sudo service php8.3-fpm restart y en caso de no poder reiniciar el proceso debemos corroborar que se haya instalado correctamente.
Verificar qué versiones de PHP y con cuáles módulos contamos en el sistema
Para poder listar las versiones de PHP y todos los módulos que tenemos instalados debemos usar el siguiente comando de Linux:
dpkg --list | grep php
El comando anterior es muy útil para identificar si tenemos multiples versiones de PHP, ya que puede que sea necesario purgar y eliminar las que ya no se requieran o por el contrario podría ser necesario configurar alguna en especifico para que funcione como la versión por defecto de PHP para el sistema en general o para alguna app web en particular.
ii php-common 2:93 all Common files for PHP packages
ii php8.3-bcmath 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 Bcmath module for PHP
ii php8.3-cli 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 command-line interpreter for the PHP scripting language
ii php8.3-common 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 documentation, examples and common module for PHP
ii php8.3-curl 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 CURL module for PHP
ii php8.3-ds 1.5.0-1+0~20240219.31+debian12~1.gbpdf5e64 amd64 PHP extension providing efficient data structures for PHP 7
ii php8.3-fpm 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 server-side, HTML-embedded scripting language (FPM-CGI binary)
ii php8.3-gd 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 GD module for PHP
ii php8.3-imagick 3.7.0-5+0~20240704.44+debian12~1.gbp3f7f5c amd64 Provides a wrapper to the ImageMagick library
ii php8.3-imap 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 IMAP module for PHP
ii php8.3-intl 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 Internationalisation module for PHP
ii php8.3-ldap 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 LDAP module for PHP
ii php8.3-mbstring 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 MBSTRING module for PHP
ii php8.3-mysql 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 MySQL module for PHP
ii php8.3-opcache 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 Zend OpCache module for PHP
ii php8.3-pgsql 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 PostgreSQL module for PHP
ii php8.3-readline 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 readline module for PHP
ii php8.3-tidy 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 tidy module for PHP
ii php8.3-xml 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 DOM, SimpleXML, XML, and XSL module for PHP
ii php8.3-xmlrpc 3:1.0.0~rc3-6+0~20231125.13+debian12~1.gbp734d6c amd64 XML-RPC servers and clients functions for PHP
ii php8.3-zip 8.3.9-1+0~20240708.36+debian12~1.gbp429c36 amd64 Zip module for PHP
Conocer y Cambiar la versión de PHP por defecto del sistema
Al contar con multiples versiones de PHP podemos en cualquier momento decidir cambiar a una versión anterior o posterior según nuestras necesidades.
Para conocer la versión por defecto de PHP del sistema hay que usar el siguiente comando
php -v
Lo que deberíamos ver en la consola es algo como lo siguiente:
PHP 8.3.13 (cli) (built: Oct 30 2024 11:27:41) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
with Zend OPcache v8.3.13, Copyright (c), by Zend Technologies
Para cambiar a una versión en particular (PHP 8.2 por ejemplo), tendríamos que usar los siguientes comandos:
sudo update-alternatives --set php /usr/bin/php8.2
sudo update-alternatives --set phar /usr/bin/phar8.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.2
sudo update-alternatives --set phpize /usr/bin/phpize8.2
sudo update-alternatives --set php-config /usr/bin/php-config8.2
Mejorar el rendimiento de PHP activando el compilador de PHP 8 JIT
JIT (Just In Time Compiler) es una característica de PHP que permite incrementar el rendimiento de cualquier aplicación compatible con PHP 8.
Esta propiedad de PHP 8 funciona compilando código PHP en código maquina y almacenándolo en cache para su posterior uso, lo que permite acelerar significativamente la ejecución de software PHP.
Para habilitar JIT es necesario contar con la extensión de PHP OPcache, para corroborar que esta se encuentre en nuestro sistema podemos usar el siguiente comando:
php -i | grep 'opcache\.enable '
En la consola deberíamos ver el estado de la extensión OPcache:
opcache.enable => On => On
Activar y configurar JIT
Para activar y configurar JIT debemos localizar y editar el archivo de configuración de OPcache, para localizar el archivo podemos usar el siguiente comando:
php -i | grep opcache\.ini
/etc/php/8.3/cli/conf.d/10-opcache.ini,
En la consola podremos ver donde se encuentra el archivo a editar, por lo que procedemos a abrirlo y editarlo:
sudo nano /etc/php/8.3/cli/conf.d/10-opcache.ini
Tras abrirlo podremos ver la configuración por defecto que trae el modulo Opcache:
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.jit=off
Debemos editar esta configuración añadiendo los parámetros de JIT para tener algo como lo siguiente:
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.jit=tracing
opcache.enable_cli=1
opcache.jit_buffer_size=50M
Procedemos a guardar nuestra nueva configuración, y para verificar que se haya guardado correctamente podemos usar el siguiente comando:
php -i | grep -E '^opcache\.(enable_cli|jit|jit_buffer_size) '
opcache.enable_cli => On => On
opcache.jit => tracing => tracing
opcache.jit_buffer_size => 50M => 50M
Una vez que JIT esta correctamente configurado ya podemos disfrutar de nuestro PHP Compilado funcionando a toda velocidad.
Habilitar PHP en nuestro sitio web
Para configurar PHP en un sitio web el proceso dependerá de que software de servidor se esta usando,
Para Nginx: es necesario modificar los archivos de configuración del servidor de ese sitio, en este sitio web tienes un manual completo sobre como montar tu servidor web con Nginx, te recomendamos consultarlo y leer el apartado sobre cómo Habilitar PHP en nuestro sitio web.
Para Apache: es necesario instalar ciertas bibliotecas y luego habilitarlas, además de modificar el archivo .htaccess para establecer que versión debe usar el sitio web.