Cómo comprobar la compatibilidad PHP

Author Top
enzo

A veces recibimos tareas de esas que dan miedo, como por ejemplo validar que un proyecto PHP continuará trabajando después de actualizar o degradar la versión PHP utilizada en nuestro servidor de producción.

Como se puede imaginar esto es realmente tarea compleja, porque se debe determinar qué piezas de código debe ser cambiadas para que el producto siga trabajando como hoy día , pero en las nuevas condiciones del servidor y cualquier omisión podría ser y sería una gran responsabilidad encima tus hombros.

Por lo tanto, ¿que puedes hacer? confiar en tu buen juicio acerca de la piezas de código serán o no compatibles suena como un mal enfoque y de hecho se trata de un enfoque terrible. Aunque se crea realmente se conoce bien la aplicación.

Afortunadamente, hay algunos proyectos de código abierto para este tipo comprobación automática y hoy voy a hablar más específicamente sobre el PHPCompatibility proyecto.

1. Instalar PHP CodeSniffer

Es posible instalar PHP CodeSniffer usando PEAR, pero yo recomendaría el uso composer.

Es necesario informar al sistema donde estará el archivo binario de PHP CodeSniffer phpcs después de la instalación con composer usando el siguiente comando.

export PATH=~/.composer/vendor/bin:$PATH

Despues debemos ejecutar composer para Instalar PHP CodeSniffer con el siguiente comando.

composer global require "squizlabs/php_codesniffer=2.*"

Para comprobar que la instalación ha sido exitosa, debemos ejecutar el siguiente comando. Este comando listará los estándares de codificación instalados.

$ phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz and Zend

Los standard de código están ubicados en  ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards.

2. Instalar PHPCompatibility code standard.

Para descargar el código estándar de PHPCompatibility tenemos que seguir estas instrucciones.

$ ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards
$ git clone https://github.com/wimg/PHPCompatibility.git

Usando phpcs -i podemos verificar si el nuevo estándar de código está disponible para ser utilizado.

$ phpcs -i
The installed coding standards are MySource, PEAR, PHPCompatibility, PHPCS, PSR1, PSR2, Squiz and Zend

3. Chequeando compatibilidad

En primer lugar, se debe definir si deseamos que el informe contenga errores o advertencias, o ambos, en mi caso deseo excluir la advertencias para centrarme en los error fatales de PHP. Estos errores podría hacer que después de una actualización de PHP en mi servidor todo el sistema colapse, para los cual utilizamos la siguiente configuración para phpcs .

phpcs --config-set error_severity 1
phpcs --config-set warning_severity 0

3.1 Reporte Ejecutivo

Si usted quiere mostrar un informe a su superior y en un formato ejecutivo, sobre como afectaria un proceso  será una actualización de la versión de PHP en su servidor, esto lo podemos obtener en un informe general con el siguiente comando en el directorio raíz de nuestro proyecto

$ phpcs --report=source --standard=PHPCompatibility --extensions=php,inc,module,install --runtime-set testVersion 5.5 -pvs .

El comando anterior analizar todos los archivos con extensión .php, .inc, .module y .install debido que quiero analizar un proyecto Drupal, por otra parte, quiero comprobar la compatibilidad de este proyecto con PHP 5.5 y mostrar un avance del progreso del análisis.

Este comando generará una salida similar a la siguiente lista.

HP CODE SNIFFER VIOLATION SOURCE SUMMARY
----------------------------------------------------------------------
SOURCE                                                           COUNT
----------------------------------------------------------------------
PHPCompatibility.PHP.RemovedExtensions                           365
PHPCompatibility.PHP.DeprecatedNewReference                      153
PHPCompatibility.PHP.ForbiddenNamesAsInvokedFunctions            6
PHPCompatibility.PHP.DeprecatedFunctions                         3
----------------------------------------------------------------------
A TOTAL OF 527 SNIFF VIOLATIONS WERE FOUND IN 4 SOURCES
----------------------------------------------------------------------

Time: 3 mins, 46.3 secs; Memory: 185.25Mb

3.2 Reporte detallado

Para evaluar el esfuerzo necesario para estar preparados para el cambio de versión de PHP, podemos obtener un informe detallado en un archivo con el siguiente comando.

phpcs --standard=PHPCompatibility --extensions=php,inc,module,install --report-full=/Users/enzo/Desktop/CS-report.txt --runtime-set testVersion 5.5 -pvs .

El comando anterior producirá una salida similar a esta.

FILE: /Users/enzo/drupal/includes/common.inc
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
 1797 | ERROR | 'clone' is a reserved keyword introduced in PHP version
      |       | 5.0 and cannot be invoked as a function (T_CLONE)
      |       | (PHPCompatibility.PHP.ForbiddenNamesAsInvokedFunctions)
----------------------------------------------------------------------

Espero que esta entrada de blog haya sido de su agrado