Actualizar PHP en Apache (LINUX)
En este post veremos como actualizar PHP en Apache, para poder explicar esto tendré que utilizar un servidor virtual
En esta usaré Linux Mint 20, instalaré apache y php 7.2 el cual luego devera ser pasado a php 7.4.
Instalación de Apache
Obviamente para la instalación de Mint usaré su iso, una vez instalado el Linux Mint deberemos instalar Apache ponga los siguientes comandos por separado si está siguiendo la instalación:
sudo apt-get update sudo apt-get install apache2
Esto instalará nuestro apache. Luego tenemos 2 opciones instalar fpm PHP o usar el módulo de Apache de PHP.
libapache2-mod-php
Para instalar PHP y el módulo apache:
sudo apt install php libapache2-mod-php
Una cosa que he aprendido de Linux es tratar de no usar ppas para poder hacer sus upgrades.
En el código anterior estamos instalando php y libapache2-mod-php, ¿pero qué PHP estamos instalando? En este ejemplo la última versión que puede obtener nuestro linux ya que aplicamos antes sudo apt-get update cuando instalamos apache2.
Por otra parte libapache2-mod-php es el módulo que instalamos para que Apache reconozca PHP.
sudo a2enmod php7.X sudo a2enmod mpm_prefork
Ten en cuenta que en un servidor podemos tener varias versiones de php aunque lo recomendable es tener la versión estable instalada 7.x o 8.x. No tocaremos este tema en este post si no sería demasiado extenso.
Actualización de PHP si estás usando mod PHP en Apache
Para actualizar esta debemos actualizar el libapache2-mod-php
sudo apt install libapache2-mod-php7.x
O también podría ser
sudo apt install libapache2-mod-php8.x
Probablemente también debas instalar el php-mysql y php-mbstring correspondiente para que ande tu mysql por elemplo:
sudo apt install php7.x-mysql php7.4-mbstring
Para deshabilitar la versión anterior podemos usar la siguiente línea, en este ejemplo supongamos que es PHP 7.2
sudo a2dismod php7.2
Es probable que debas eliminar esta version de PHP, puedes hacerlo parando el server y ejecutando un autoremove en Linux.
sudo apt-get autoremove
Luego deberíamos habilitar la nueva versión.
sudo a2enmod php7.4 systemctl restart apache2
Listo con esto nos debería andar nuestro PHP, solo recuerde que si debe instalar módulos de PHP recuerde instalarlos también.
Instalación de PHP fpm
Muchas veces utilizamos ppa para instalar nuestro PHP por ejemplo:
sudo apt-get install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install -y php7.x
Lo bueno de utilizar el ppa es que te puedes instalar la última versión de PHP.
Si linux tiene ppas se complica hacer sus upgrades, por ejemplo si tenemos que pasar del linux 19.3 a 20 deberíamos deshabilitar los ppas o desinstalarlos en el peor de los casos.
Esto no es algo que recomiendo. En vez de instalarlo así hazlo de la siguiente manera donde X es la mayor release y x la version:
sudo apt-get install phpX.x-fpm phpX.x-curl phpX.x-mbstring phpX.x-mysql -y
por ejemplo si queremos instalar PHP 7.4
sudo apt-get install php7.4-fpm php7.4-curl php7.4-mbstring php7.4-mysql -y
Pero que es fpm?
FPM (FastCGI Process Manager) es una implementación alternativa al PHP FastCGI con algunas características adicionales (la mayoría) útiles para sitios web con mucho tráfico.
https://www.php.net/manual/es/install.fpm.php
Antes que nada deberíamos deshabilitar los mod
sudo a2dismod php7.2 sudo a2dismod php7.4
Los que tenga en caso de no poseer el módulo Linux nos informara. Luego de hacer esto debemos deshabilitar mpm_prefork
sudo a2dismod mpm_prefork
Debemos configurar apache para usar fpm
sudo a2enmod mpm_event sudo a2enconf php-fpm
Luego necesitaríamos crear un archivo de configuración php-fpm.conf en la carpeta conf-available de Apache.
sudo nano /etc/apache2/conf-available/php-fpm.conf
el contenido de este archivo debe verse como el siguiente:
<IfModule mod_fastcgi.c> AddHandler php7-fcgi .php Action php7-fcgi /php7-fcgi Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /run/php/php7.4-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
Como sé si estoy usando fpm o un módulo PHP en Apache
Antes de continuar debo dejar en claro que con el módulo de PHP no me refiero al módulo libapache2-mod-php el módulo libapache2-mod-php siempre es necesario.
Lo ideal es utilizar una de las 2 maneras: o fpm o modulos anque la primera es la recomendada.
Puedes chequear si estás usando fpm de la siguiente manera, aunque también puedes chequear si mpm_fork está activado o no.
ps aux | grep php-fpm
root 665 0.0 0.8 216428 26408 ? Ss 15:55 0:00 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf) www-data 761 0.0 0.3 216840 9328 ? S 15:55 0:00 php-fpm: pool www www-data 762 0.0 0.3 216840 9328 ? S 15:55 0:00 php-fpm: pool www agustin 3971 0.0 0.0 11560 668 pts/2 S+ 17:12 0:00 grep --color=auto php-fpm
Puedes chequear si el módulo prefork está activado con el siguiente comando en consola
a2query -M
otra manera de chequear esto es con:
apachectl -V | grep -i mpm