Introducción
El 1 de diciembre del 2016 la comunidad de desarrollo de PHP liberó la versión 7.1, la cuál incorporó 12 nuevas características, de ellas mencionamos algunas a continuación:
– Tipos «nullable»: Ahora las funciones pueden devolver nulo prefijando el tipo de datos con un signo de interrogación (?), de manera similar para los párametros pueden aceptar nulo prefijando el tipo de datos con un signo de interrogación.
– Funciones void: Las funciones de tipos void no deben devolver ningún valor por tanto deben usar un return
vacío o omitirlo completamente, pienso que si se omite el return
le da más claridad al código ya que está más acorde con la definición de void, el valor NULL no es un valor válido de retorno para las funciones tipo void.
– Desempaque simétrico de arreglos. Ahora se puede desempacar un arreglo usando corchetes: [] (tienen la misma funcionalidad que la sentencia list, también se pueden usar dentro de un foreach)
– Visibilidad de las constantes de clase. Ahora a las constantes de clase se le puede definir la visibilidad o alcance: pública (valor por defecto), protejida o privada.
– El seudotipo iterable. Se ha introducido un nuevo seudotipo (similar a callable) llamado iterable. Se puede utilizar en parámetros y tipos de retorno, donde acepta tanto arrays u objetos que implementen la interfaz Traversable.
– Manipulación de múltiples excepciones en un solo catch. PHP 7.1 permite capturar varias excepciones en un solo catch separando cada exception con una barra vertical: |.
– Soporte para claves en list(). Ahora se pueden especificar claves en list(), o en su nueva sintaxis abreviada []. Esto habilita el desempaque de arreglos con claves no enteras o no secuenciales.
Objetivos
– Actualizar a la última versión
– Obtener beneficios de las últimas caractéristicas del lenguaje
– Corregir errores de versiones anteriores
– Personalizar el proceso de instalación
Prerrequisitos
Este tutorial asume que Ud. tiene
– Algún conocimiento sobre GNU/Linux
– Ubuntu GNU/Linux instalado
– Esta familiarizado con el intérprete de comandos
– Está familiarizado con el proceso de compilación
Descargar PHP
La versión de PHP disponible en el momento de escribir este tutorial es la 7.1.11, para descargarla teclee:
$ wget http://php.net/get/php-7.1.11.tar.xz/from/this/mirror -O php-7.1.11.tar.xz
Descompactar
Podemos descompactar el fichero descargado anteriormente usando la herramienta tar
$ tar xJvf php-7.1.11.tar.xz
donde:
x = extraer
J = permite manipular extensiones xz
v = verboso
f = fichero
Si el comando anterior emite un mensaje de error debes instalar el paquete xz-utils más información en: Error al descompactar fichero .tar.xz.
Descargar php-dev-install-dep.sh script de Github
php-dev-install-dep.sh es un bash script que facilita el proceso de instalacción de la Colección de Compiladores GNU, herramientas esenciales y dependencias necesarias.
$ wget https://raw.githubusercontent.com/yoander/sysadmin/master/shscript/php-dev-install-dep.sh && \ chmod a+x -c php-dev-install-dep.sh
luego ejecute el script tecleando:
$ sudo ./php-dev-install-dep.sh
Usted puede modificar el script anterior de acuerdo a sus necesidades.
Descargar php-build.sh script de Github
php-build.sh facilita el proceso de compilación de PHP. Habilita las extensiones más comunes: curl, openssl, intl, mysql, pcre, … y permite instalar PHP en un DIR elegido por Ud. ofrece la posibilidad de compilar PHP con soporte para Apache (prefork o worker) o con soporte para PHP-FPM.
Ud. puede modificar php-build.sh de acuerdo a sus necesidades.
Si compila PHP con soporte para PHP-FPM puede editar el script php-build.sh y establecer el usuario y grupo bajo el cual correrá el servicio PHP-FPM.
$ wget https://raw.githubusercontent.com/yoander/sysadmin/master/shscript/php-build.sh && \ chmod a+x -c php-build.sh
Compilar PHP con soporte para PHP-FPM y systemd
PHP-FPM (FastCGI Process Manager) es una implementación alternativa del protocolo FastCGI ques es parte oficial de PHP a partir de la versión 5.3.3.
systemd es un reemplazo al sistema de inicialización SysV. systemd además es una suite de administración de servicios y configuraciones para el sistema operativo GNU/Linux.
Primero creamos los DIR necesarios que se usaran durante el proceso de compilación.
$ sudo mkdir -p /etc/php /etc/php/conf.d /usr/lib/php/modules /usr/share/pear
Instalamos las librerías de desarrollo de systemd
$ sudo apt-get install libsystemd-dev
luego compilamos
$ ./php-build.sh -fs php-7.1.11
donde -f = soporte PHP-FPM, s = integración con systemd
Instalar
$ cd php-7.1.11 && sudo make install
Creando fichero de configuración
El código fuente de PHP viene con 2 versiones del fichero .ini. Debido a que estamos compilando PHP en un servidor de PROD tecleamos:
$ sudo cp -v php.ini-production /etc/php/php.ini
Ajuste las directivas de acuerdo a sus necesidades
Creando el fichero de configuración para PHP-FPM
$ sudo cp -pv /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf; sudo cp -pv /etc/php/php-fpm.d/www.conf.default /etc/php/php-fpm.d/www.conf
Editamos el fichero /etc/php/php-fpm.d/www.conf
Para permitir que el servicio php-fpm escuche por todas las interfaces establecemos el valor de la directiva listen a:
listen 9000
O si deseamos que escuche en una dirección IP específica
listen IP:9000
IP puede ser IPv4 o IPv6
Para restringir el acceso al servicio php-fpm y solo permitir determinadas IPs establecemos la directiva listen.allowed_clients a:
listen.allowed_clients = IP1,IP2,IP3,IP4
IP1,IP2,IP3,IP4 pueden ser IPv4 o IPv6
Habilitamos OPcache
OPcache mejora el rendimiento de sus aplicaciones al almacenar el código precompilado en la memoria compartida permitiendo servir mayor número de peticiones por segundo.
$ sudo bash -c 'echo "zend_extension=opcache.so" > /etc/php/conf.d/20-opcache.ini'
Creamos el servicio de inicialización PHP-FPM
$ sudo cp -v ./sapi/fpm/php-fpm.service /etc/systemd/system/php-fpm.service
Si el usuario y el grupo bajo los cuales se ejecutará el servicio php-fpm no existe entonces deben crease.
$ sudo bash -c 'groupadd --system www-data && \ useradd --system -m -d /var/www -s /usr/sbin/nologin -g www-data www-data'
Los comandos anteriores crean el usuario y el grupo www-data
-m = Crea el DIR HOME si no existe
-d = DIR HOME para el usuario en cuestion
-s = login shell (no login shell debido a que el usuario www-data no se autenticará en el sistema operativo)
-g = a que grupo pertenecerá el usuario en cuestión
Si el usuario y grupo www-data existen entonces crear el DIR /var/www
$ sudo mkdir -p /var/www/
Por razones de seguridad cambiaremos el propietario y el grupo para el DIR /var/www
$ sudo bash -c 'chown root:root -c /var/www/ && chmod 755 /var/www/'
Iniciar PHP-FPM con el sistema operativo
$ sudo systemctl enable php-fpm
Iniciar el servicio PHP-FPM
$ sudo systemctl start php-fpm
Chequear el servicio PHP-FPM
$ sudo systemctl status php-fpm
Crear el fichero info.php
$ sudo bash -c 'echo "<?php phpinfo();" > /var/www/info.php'
NGINX
NGINX es un servidor web con excelente rendimiento y bajo consumo de memoria. NGINX puede usarse como proxy reverso y como balanceador de carga. En este ejemplo usaremos NGINX como proxy reverso para comprobar nuestro servicio PHP-FPM.
Instalando NGINX
$ sudo apt-get install nginx
Editamos /etc/nginx/sites-enabled/default
Buscamos la seccion server y agregamos el siguiente bloque
location ~ \.php$ { root /var/www; fastcgi_pass 192.168.33.10:9000; include snippets/fastcgi-php.conf; }
192.168.33.10 es la IP donde el servicio php-fpm está escuchando, abrimos el fichero
/etc/nginx/snippets/fastcgi-php.conf
buscamos y comentamos la línea
try_files $fastcgi_script_name =404;
Iniciar NGINX con el sistema operativo
$ sudo systemctl enable nginx
Iniciar el servicio NGINX
$ sudo systemctl start nginx
Chequear el servicio NGINX
$ sudo systemctl status nginx
Probar
Teclee en su navegador
$ firefox http://IP/info.php
IP es la IP o la url donde el servidor NGINX está escuchando.
Conclusiones
Ahora que has aprendido como compilar PHP puedes obtener todas las ventajas de la última versión del lenguaje: corrección de errores, mejoras de rendimiento, últimas funcionalidades sin esperar a que los empaquetadores de su distribución actualicen la versión de PHP.
Compilando PHP desde el código fuente, 1 (11)
- Cómo compilar PHP 7.1 en Ubuntu 16.04
- pbt – Una herramienta para compilar PHP
- Cómo Compilar/Instalar PHP-7.2 en CentOS
- Cómo compilar PHP-7.3 en Debian GNU/Linux
- ¿Cómo Compilar PHP 7.4 en Ubuntu 18.04?
- ¿Cómo Compilar PHP 8 en Debian 10?
- Compilar php 5.5 con soporte apache prefork
- Compilar PHP-5.6 con soporte para Apache Worker
- Compilar php-5.6 con soporte fpm
- Compilar PHP-5.6 en Centos 7
- Compilar PHP 7 en Debian 8