Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |not checked

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
Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category