Internet, Informática y Tecnología

Agregar extensión Brotli para PHP en Debian y Ubuntu

php brotli logos

php brotli logos

El algoritmo de compresión Brotli creado por Google ya tiene algunos años en uso, aunque con una adopción lenta por parte de los servidores siendo que sí ofrece una gran mejora en cuanto al uso de Gzip y Deflate. A continuación, les mostrare como compilar la extensión para PHP de Brotli, que no hay que confundir con el módulo de Nginx. Esta extensión nos permite aprovechar las características, como su alta tasa de compresión con menos uso de CPU, y nos puede ayudar en el caso de la precompresión que usa Nginx con "brotli_static" ya que Nginx solo se encarga de servir el contenido y no de comprimirlo, al contrario de la compresión normal de las peticiones HTTP.

Para las pruebas se usó Debian Buster y Ubuntu Focal, con PHP 7.3 y PHP 7.4 respectivamente. Estas instrucciones son compatibles con PHP 7.*.

Compilación de extensión PHP

Antes de compilar la extensión instalamos el siguiente paquete:

sudo apt install php-dev

Para empezar a compilar ejecutar:

git clone --recursive --depth=1 https://github.com/kjdev/php-ext-brotli.git
cd php-ext-brotli
phpize
./configure
make

Instalación en el mismo sistema

Aquí sólo ejecutamos:

sudo make install

Esto copiará automáticamente la extensión del directorio php-ext-brotli/modules/brotli.so hacia el directorio donde se encuentran las demás extensiones de PHP. Nos dirigimos al directorio:

cd /etc/php/7.*/mods-available/

Creamos un archivo llamado brotli.ini:

sudo nano brotli.ini

Lo guardamos con el contenido:

extension=brotli.so

Instalación en otro sistema

Este procedimiento se usa si vamos a instalar la extensión en otro sistema con las mismas versiones de sistema operativo y PHP, para comprobar la versión de PHP, usamos el comando php -v. En el sistema que se instalará, para saber el directorio de extensiones de PHP ejecutamos:

php -i | grep '^extension_dir' | sed -e 's/extension_dir => .* => //'

Tomando en cuenta que trabajamos en el directorio home de nuestro usuario y la carpeta donde se encuentra el código fuente de la extensión es php-ext-brotli. Copiamos el archivo resultante del sistema en el que compilamos la extensión, a la carpeta generada por el comando anterior en el sistema destino.

Sistema origen:

php-ext-brotli/modules/brotli.so

Sistema destino:

DIRECTORIO_GENERADO_COMANDO_ANTERIOR/brotli.so

Ejemplo de directorio completo del sistema destino (no usar esta ruta en específico):

/usr/lib/php/20180731/brotli.so

Por último, creamos el archivo brotli.ini:

sudo nano /etc/php/7.*/mods-available/brotli.ini

Con el siguiente texto:

extension=brotli.so

Guardamos y pasamos al siguiente paso.

Activación y comprobación de la extensión

Para activar la extensión ejecutamos el comando:

sudo phpenmod brotli

Si no existen problemas el comando no debe mostrar errores. Para comprobar si se ha cargado la extensión ejecutamos:

php -m

En la sección "[PHP Modules]" debe aparecer "brotli". Para comprobar el funcionamiento de la extensión desde PHP CLI ejecutamos el siguiente comando:

php -r "echo brotli_uncompress(base64_decode('CwGAUEhQAw==')) . \"\n\";"

El resultado de ese comando debe ser:

PHP

Si obtenemos el error:

PHP Fatal error: Uncaught Error: Call to undefined function brotli_uncompress() in Command line code:1

Significa que la extensión no está activada o no es compatible.

Al terminar es necesario reiniciar PHP.

Nginx, PHP y PHP-FPM, cambiando 7.3 por la versión que estamos usando.:

sudo systemctl restart php7.3-fpm

Apache y PHP:

sudo systemctl restart apache2

PHP CLI:

No es necesario reiniciar.

Enlace al repositorio de la extensión PHP de Brotli.

Contenido relacionado