Una de las primeras tareas que debemos encarar cuando realizamos una auditoría de código de un sistema es detectar la versión de PHP que se está utilizando.
Es importante saberlo para darnos una idea de qué tanto mantenimiento se ha realizado sobre el código y hasta cuánto se puede mejorar apalcándonos en las últimas características disponibles (O qué tan costoso será incorporarlas debido a refactors y demás).
Hay diversas formas de encarar esta tarea. Nombraré algunas:
Qué nos dice el webserver
Una forma muy sencilla es realizar una petición al servidor web y analizar los encabezados de la respuesta.
Ejemplo:
No hace falta ser muy perspicaz… si el webserver tiene instalada la versión 5.3.29… el código a lo sumo está desarrollado usando esa versión.
Si bien no es una información 100% certera, nos da una buena primera aproximación a lo que nos estamos enfrentando.
Esta técnica, sin embargo, tiene un par de inconvenientes:
- Depende de que el código esté publicado en algún webserver (Suposición bastante lógica si lo que estamos viendo es una aplicación real)
- Depende de que la configuración del webserver no sea muy segura (En general, es preferible no mostrar este tipo de información a entidades externas de propósitos poco claros…).
Tal vez composer pueda ayudarnos
Si tenemos la suerte de encontrarnos con un proyecto hecho usando composer tal vez encontremos la solución dentro del archivo composer.json:
O composer.lock:
A hurgar se ha dicho
Pero si realmente queremos saber para qué versión se escribió el código… nada mejor que analizar el código mismo.
¿Qué es lo que estamos buscando? Evidencias de uso de construcciones que sólo se hicieron disponibles a partir de cierta versión.
En el caso de PHP, la evolución que ha tenido el lenguaje en los últimos años hace bastante simple esta tarea.
Por ejemplo, a partir de la versión 5.4 apareció una característica muy popular: la definición de arreglos en forma literal ( $a = [1, 2, 3] ).
Basta con encontrar un punto del código donde se utilice una definición como esta para decir que el código está escrito para un intérprete versión mayor o igual que 5.4.
De la misma forma en que se agregan características al lenguaje en forma constante, también se quitan aquellas que ya no se consideran seguras.
Esto significa que, si encontramos usos de características que han quedado obsoletas en una determinada versión, el código debe estar escrito pensando en una anterior.
Para saber qué es lo que debemos buscar basta con leer las guías de migración de versión que se encuentran en php.net (Por ejemplo, acá están las indicaciones para migrar de 4 a 5 y acá de 5.6 a 7.0).
Por qué es importante
Saber en qué versión se encuentra un sistema nos permitirá, por ejemplo, evaluar un hosting antes de contratarlo.
Por otro lado, siempre es preferible usar la última versión disponible del lenguaje a la hora de programar y saber que tenemos entre manos un sistema viejo nos dará una idea del esfuerzo que conllevará ponerlo al día (Y tal vez lo mejor sea re-escribirlo por completo).
¿Conocés alguna otra forma de determinar la versión de PHP utilizada en un sistema?
- Cómo enviarencabezados SOAP desde PHP - 09/12/2024
- Por qué PHP 8 no satisface el requisito ^7.3 de composer - 09/12/2024
- Cómo usar PHPUnit - 03/12/2024