Elementos a tener en cuenta cuando actualizas a PHP

Desde hace tiempo las versiones de PHP siguen un calendario de actualizaciones periódico. Aunque a muchos el lanzamiento de PHP 7 aún nos parece reciente, lo cierto es que algunas versiones menores, como la 7.0 y la 7.1, ya han dejado de tener soporte. Incluso PHP 7.2 recibe hoy solamente actualizaciones de seguridad, por lo que lo recomendable sería disponer, al menos, de PHP 7.3.

En la siguiente imagen podemos ver el calendario de versiones soportadas por PHP, lo que nos dará una idea de lo importante que es mantener una serie de buenas prácticas en nuestros desarrollos, a fin de que el trabajo en las migraciones sea mínimo y las aplicaciones web sigan funcionando correctamente.

A pesar que es de sobra conocido que que PHP 5 dejó de tener soporte oficial desde principios de 2019, lo cierto es que hay todavía muchos sitios web que funcionan bajo esa plataforma. Obviamente, la seguridad es un motivo más que suficiente para justificar una migración de versión de PHP, pero además el rendimiento que se puede alcanzar en las nuevas versiones del lenguaje triplica al menos el que tenía PHP 5.

Consejos para actualizar PHP sin problemas

La actualización que puede darnos más problemas es la migración desde PHP 5 a PHP 7. Sin embargo, nuestras necesidades consisten simplemente en eliminar funcionalidades marcadas como obsoletas. Estas funcionalidades venían siendo advertidas ya en versiones de PHP 5 avanzadas, por lo que si tenemos activas las advertencias de PHP en el servidor de desarrollo seguramente ya éramos conscientes de ellas.

El trabajo a realizar sería el siguiente.

  • Asegurarnos de tener activadas los warnings de PHP en el servidor de desarrollo y ejecutar el sitio web, advirtiendo y corrigiendo todos los mensajes de funcionalidades marcadas como obsoletas (deprecated).
  • Actualizar el servidor de desarrollo, para ejecutar la versión de PHP moderna que pensemos disponer en nuestro servidor de producción.
  • Realizar los cambios oportunos, en función de los mensajes de error que obtengamos o las posibles advertencias de PHP.

Si estamos realizando una actualización de PHP 5 a PHP 7 existe una guía oficial en el propio sitio de PHP, que podemos leer con detenimiento: https://www.php.net/manual/es/migration70.php

Desde ese mismo enlace encontraremos también links a páginas para migrar de versiones superiores, por ejemplo desde PHP 7.0 a 7.1 o desde 7.1 a 7.2, incluso a 7.3 o 7.4.

Una vez que el sitio web se encuentra funcionando correctamente en nuestro servidor de desarrollo, es el momento de actualizar la versión en el servidor de producción.

Extensión de MySQL

El cambio más relevante del paso hacia PHP 7 es el fin del soporte de la extensión ext/mysql en PHP 7.0.

Este es un buen momento para plantearse si conviene actualizar nuestra aplicación web para seguir trabajando con las extensiones específicas de MySQL, o pasar directamente a PDO. Migrar el código a Mysqli resultará menos pesado pero la actualización a PDO nos ofrece una interfaz de acceso a los datos de más alto nivel y una capa de abstracción, que evitará migraciones en el código si alguna vez ha de cambiarse el motor de base de datos.

En la propia documentación de PHP nos ofrecen un par de artículos interesantes para documentarnos sobre este tema:

  • Elegir un API para MySQL https://www.php.net/manual/es/mysqlinfo.api.choosing.php
  • Aprovechar las sentencias preparadas https://php.net/manual/es/mysqli.quickstart.prepared-statements.php

Herramienta de actualización Rector

‘Rector’ es un analizador de código que permite alterar automáticamente nuestra aplicación, transformando el código según las necesidades del proyecto. Según sus creadores puede reducir hasta en un 80% la carga de trabajo al actualizar el código de PHP entre versiones. Podemos encontrar el proyecto en Github. https://github.com/rectorphp/rector

Su instalación se realiza con el siguiente comando de Composer:

composer require rector/rector --dev

Una vez instalado podemos ver los distintos niveles de trabajo con este comando de consola:

vendor/bin/rector levels

Por ejemplo, podríamos cambiar las extensiones de MySQL a MySQLi mediante el comando:

vendor/bin/rector process public --level mysql-to-mysqli

Nota: Es importante que uses Git, o cualquier otro sistema de control de versiones, para verificar los cambios realizados por Rector en el código, a fin de poder volver hacia atrás las actualizaciones realizadas, si es que no son de nuestro agrado, o controlar aquellos puntos donde se ha actualizado la aplicación y verificar su buen funcionamiento.