La versión final de PHP 7.1 está disponible para descargar en Github y los espejos de PHP ahora. PHP 7.1 es la próxima generación del lenguaje de programación PHP, es hasta 2 veces más rápido que PHP 5.6 y 14 veces más rápido que PHP 5.0 según las notas de la versión. La nueva versión de PHP no es 100% compatible con PHP 5.x ya que se han eliminado algunas API obsoletas, por lo que es una buena idea comenzar a probar la compatibilidad de sus sitios web con esta nueva versión. Esto se puede hacer fácilmente y sin afectar todos los sitios en su servidor usando la función de versión múltiple de PHP en ISPConfig 3. La versión de PHP se puede seleccionar en la configuración del sitio web de ISPConfig 3 para cada sitio individualmente. Esta función funciona con PHP-FPM y FastCGI. Este tutorial muestra cómo compilar el nuevo PHP 7.1 como una versión PHP-FPM y FastCGI en un servidor Debian Jessie. Esta compilación de PHP 7.1 incluye muchas extensiones compiladas y Zend OPcache y Memcached como módulos cargables.
1 nota preliminar
Instalaré PHP 7.1 que se lanzó como versión final hace unos días. Tenga en cuenta que PHP-FPM se puede usar en servidores Apache y Nginx mientras que FastCGI solo está disponible para servidores Apache.
Con las versiones anteriores de PHP, PHP-FPM y FastCGI se excluyeron mutuamente, por lo que se tuvo que construir un binario FPM y FastCGI por separado. Con PHP 7.1, se puede compilar un único binario compatible con los modos FPM y FCGI.
2 Compile PHP 7.1 con PHP-FPM y Fastcgi
Descarga y extrae PHP 7.1 de Github:
mkdir -p /opt/php-7.1
mkdir /usr/local/src/php7-build
cd /usr/local/src/php7-build
wget http://de2.php.net/get/php-7.1.16.tar.bz2/from/this/mirror -O php-7.1.16.tar.bz2
tar jxf php-7.1.16.tar.bz2
cd php-7.1.16/
Instale los requisitos previos para compilar PHP 7.1 y el editor nano que usaré para editar los archivos de configuración:
apt-get install build-essential nano autoconf
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
(El último comando es necesario si compila PHP con --with-imap, porque de lo contrario, ./configure se detendrá con el siguiente error:
checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
[email protected]:/usr/local/src/php5-build/php-7.0.7#
)
Configure y cree PHP 7.1 de la siguiente manera (puede ajustar el comando ./configure según sus necesidades, eche un vistazo a
./configure --help
para ver todas las opciones disponibles; si usa un comando ./configure diferente, es posible que se requieran bibliotecas adicionales o que el proceso de compilación falle):
./configure --prefix=/opt/php-7.1 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
El último cambio (--enable-fpm) asegura que esta versión de PHP funcionará con PHP-FPM.
make
make install
Copie php.ini y php-fpm.conf en las ubicaciones correctas:
cp /usr/local/src/php7-build/php-7.1.16/php.ini-production /opt/php-7.1/lib/php.ini
cp /opt/php-7.1/etc/php-fpm.conf.default /opt/php-7.1/etc/php-fpm.conf
cp /opt/php-7.1/etc/php-fpm.d/www.conf.default /opt/php-7.1/etc/php-fpm.d/www.conf
Abra /opt/php-7.1/etc/php-fpm.conf y ajuste la siguiente configuración (elimine el; delante de la línea pid):
nano /opt/php-7.1/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...]
Luego abra /opt/php-7.1/etc/php-fpm.d/www.conf y ajuste la línea de escucha, debe usar un puerto no utilizado (por ejemplo, 8999; el puerto 9000 podría estar en uso por PHP-FPM predeterminado de Debian) :
nano /opt/php-7.1/etc/php-fpm.d/www.conf
[...] listen = 127.0.0.1:8999 [...]
Cuando use varias versiones adicionales de PHP, asegúrese de usar un puerto libre, p. 8998, 8997 y así sucesivamente para las próximas versiones.
3 Crea el script de inicio y el archivo de unidad systemd
Debian es compatible con Systemd, así como con los scripts de inicio tradicionales. La mayoría de los sistemas hoy en día usan Systemd, en este caso continúe con el capítulo 3.2, para sistemas con un sistema de inicio tradicional, siga el capítulo 3.1 y luego continúe con el capítulo 4. No instale ambos scripts, systemd e init.d, en el mismo sistema.
3.1 Crear un script de inicio init.d
Primero crearé un script de inicio para el servicio php-fpm y luego crearé una unidad systemd.
Primero, cree un script de inicio para PHP-FPM:
nano /etc/init.d/php-7.1-fpm
#! /bin/sh ### BEGIN INIT INFO # Provides: php-7.1-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-7.1-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-7.1/sbin/php-fpm php_fpm_CONF=/opt/php-7.1/etc/php-fpm.conf php_fpm_PID=/opt/php-7.1/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac
Haga que el script de inicio sea ejecutable y cree los enlaces de inicio del sistema:
chmod 755 /etc/init.d/php-7.1-fpm
insserv php-7.1-fpm
Finalmente inicie PHP-FPM:
/etc/init.d/php-7.1-fpm start
El resultado debería ser:
/etc/init.d/php-7.1-fpm start
Starting php-fpm done
3.2 Crear un script Systemd para PHP 7.1
Ahora cree el archivo de la unidad systemd:
nano /lib/systemd/system/php-7.1-fpm.service
con el siguiente contenido:
[Unit]
Description=The PHP 7.1 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/opt/php-7.1/var/run/php-fpm.pid
ExecStart=/opt/php-7.1/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.1/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
Habilite el servicio y vuelva a cargar systemd:
systemctl enable php-7.1-fpm.service
systemctl daemon-reload
Finalmente inicie PHP-FPM:
systemctl start php-7.1-fpm.service
4 Habilitar Zend OPcache
Para habilitar Zend OPcache, abra /opt/php-7.1/lib/php.ini...
nano /opt/php-7.1/lib/php.ini
... y agregue la siguiente línea al final:
[...] zend_extension=opcache.so
Las extensiones Memcache y APCu aún no se pueden instalar en PHP 7.1, por lo que omitiré su instalación por ahora. Actualizaré el tutorial más adelante cuando las extensiones pecl sean compatibles con PHP 7.1.
Pruebe la versión de PHP:
cd /opt/php-7.1/bin
./php --version
El resultado debería ser similar a esta captura de pantalla.
Tenga en cuenta: La captura de pantalla es de PHP 7.1.16, el tutorial se actualiza continuamente para las nuevas versiones de PHP 7.1, pero no tomamos nuevas capturas de pantalla cada vez, por lo que la versión de PHP 7.1 que verá en su servidor podría ser más nueva. La versión actual de este tutorial es para php-7.1.16.
5 Habilitar Memcache (opcional)
En este capítulo, compilaré y habilitaré la extensión PHP Memcached.
El primer paso es instalar el paquete libmemcached-dev desde Debian.
apt-get install libmemcached-dev
Luego cree un directorio, descargue la extensión PHP Memcache de Github, descomprima el archivo e ingrese al directorio que contiene los archivos desempaquetados.
mkdir /usr/local/src/php7-build/php-memcache
cd /usr/local/src/php7-build/php-memcache
wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
unzip php7.zip
cd php-memcached-php7
Prepare las fuentes ejecutando el comando phpize desde PHP 7.1.
/opt/php-7.1/bin/phpize
Configura y crea la extensión Memcache de PHP.
./configure --with-php-config=/opt/php-7.1/bin/php-config
make
make install
Para habilitar la extensión Memcache, abra /opt/php-7.1/lib/php.ini...
nano /opt/php-7.1/lib/php.ini
... y agregue la siguiente línea al final:
[...] extension=memcached.so
2.1 Instalar la extensión xDebug (opcional)
El módulo xDebug es una extensión de depuración para PHP. La instalación es opcional.
Instale xDebug con estos comandos.
cd /opt/php-7.1/etc
pecl -C ./pear.conf update-channels
pecl -C ./pear.conf install xdebug
Luego edite el archivo php.ini con un editor:
nano /opt/php-7.1/lib/php.ini
y agregue la siguiente línea al final del archivo:
zend_extension=/opt/php-7.1/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
Finalmente reinicie el demonio php-fpm:
service php-7.1-fpm restart
7 Habilite PHP 7.1 en ISPConfig
En ISPConfig 3, puede configurar la nueva versión de PHP en Sistema> Versiones adicionales de PHP. En la pestaña Nombre, simplemente ingrese un nombre para la versión de PHP (por ejemplo, PHP 7.1); esta versión de PHP aparecerá con este nombre en la configuración del sitio web en ISPConfig:
Vaya a la pestaña Configuración de FastCGI y complete los campos de la siguiente manera:
Path to the PHP FastCGI binary: /opt/php-7.1/bin/php-cgi
Path to the php.ini directory: /opt/php-7.1/lib
Luego vaya a la pestaña Configuración de PHP-FPM y complete los campos de la siguiente manera:
Path to the PHP-FPM init script: /etc/init.d/php-7.1-fpm
Path to the php.ini directory: /opt/php-7.1/lib
Path to the PHP-FPM pool directory: /opt/php-7.1/etc/php-fpm.d
7 Enlaces
- PHP:http://www.php.net/
- ISPConfig:http://www.ispconfig.org/
- Debian:http://www.debian.org/