PHP 4, descanse en paz

Aproximadamente hace 3 años fue liberado PHP 5. En estos tres años ha demostrado tener muchas mejoras con respecto a PHP 4.

PHP 5 es rápido, estable y productivo por lo que los desarrolladores del lenguaje dejarán de entregarnos nuevas versiones de PHP 4, que terminará en la 4.4 y fue descontinuado el último día del año 2007; sin embargo se mantendrán publicando actualizaciones críticas de seguridad para éste hasta agosto del 2008.

Es por esto que los desarrolladores nos recomiendan emplear lo que queda de año para migrar nuestras aplicaciones hechas en PHP 4 hacia la versión 5 y precisamente ese es el objetivo de este artículo, ayudar en el proceso de migración con algunos consejos y soluciones.

¿De dónde obtengo PHP 5?

La última versión estable se puede descargar en el sitio oficial, donde encontraremos disponible el código fuente listo para compilar y el binario para realizar nuestra instalación sobre Windows. También se puede instalar fácilmente desde el gestor de paquetes que utilicemos en nuestra distribución de Linux.

Para las distribuciones basadas en Debian es recomendable utilizar apt-get o aptitude y para las basadas en paquetes de instalación RPM pueden bajarse la última versión utilizando el buscador de paquetes.

¿Qué ha cambiado en PHP 5?

Antes de migrar cualquiera de nuestras aplicaciones es necesario conocer los cambios que han ocurrido en PHP 5 con respecto a versiones anteriores y de esta forma realizar los preparativos necesarios para que la migración sea exitosa.

Esta versión de PHP tiene integrado el Motor Zend 2, con lo que ha mejorado significativamente el rendimiento y en general todas las capacidades de PHP 5; ya que éste fue hecho especialmente para ser más rápido que el anterior.

Además, los desarrolladores han tenido en cuenta la migración, por lo que han tomado las precauciones necesarias para que un código bien escrito con PHP 4, sea perfectamente comprendido por el motor de PHP 5, y de esta forma hacernos este proceso más fácil, así como una nueva directiva para habilitar la compatibilidad con la versión anterior que ha sido agregada al archivo de configuración y de la que hablaremos más adelante.

La mayoría del código PHP 4 que existe actualmente debe correr sin problemas en el motor PHP 5. Pero siempre es recomendable conocer algunos cambios incompatibles con versiones anteriores y probar el código antes de la migración en los entornos de producción.

Cambios en CGI y CLI

El entorno CLI ha sufrido algunas modificaciones, al igual que los nombres del archivo CGI. En PHP 5 el archivo CGI es php-cgi.exe (anteriormente php.exe) y la versión CLI está ubicada en el directorio principal (anteriormente se encontraba en cli/php.exe).

También se introdujo un nuevo módulo, el php-win.exe que es similar a la versión CLI, excepto que php-win.exe no genera ninguna salida, por lo que no provee una consola. Mostrando un comportamiento similar al de php-gtk.

La versión CLI siempre define las variables globales $argv y $argc, sin importar las directivas establecidas en php.ini. Incluso teniendo el parámetro register_argc_argv en off no tendrá efecto en la versión CLI.

Si está usando PHP en modo CGI, será necesario realizar los cambios correspondientes en su servidor web. En Apache deberá modificar el archivo de configuración como se muestra a continuación:

# cambie esta línea:
Action application/x-httpd-php "/php/php.exe"
# por esta:
Action application/x-httpd-php "/php/php-cgi.exe"

En el servidor web de Windows: IIS deberá configurar los CGI como se detalla bajo el subtítulo “Configuración de Internet Information Services” en el artículo Cómo publicar páginas PHP en Internet Information Services publicado en esta web.

Modificaciones en los archivos de configuración

No solo los CGI y CLI tuvieron modificaciones, también los módulos ISAPI de esta versión cambiaron sus nombres de php4xxxx a php5xxxx, por lo que será necesario realizar cambios en algunos archivos de configuración del servidor web. En Apache deberá realizar las modificaciones como se muestra en el recuadro siguiente:

# cambie esta línea:
LoadModule php4_module /php/sapi/php4apache2.dll
# por esta:
LoadModule php5_module /php/php5apache2.dll

Nuevas funciones

En esta versión de PHP se han agregado algunas nuevas funciones para: operaciones con matrices, procesamiento de datos utilizando InterBase, conversión de juegos de caracteres con iconv, manipulación de stream, trabajo con fecha y hora, cadenas y otras varias. También es importante destacar que la extensión Tidy, para manipulación de documentos HTML, ha cambiado su API completamente.

Directivas en el archivo de configuración

Se han agregado al archivo de configuración php.ini nuevas directivas que se describen a continuación:

  • mail.force_extra_parameters: Obliga a que se agreguen los parámetros especificados como parámetros extra al ejecutable de sendmail. Estos parámetros siempre reemplazan el valor del quinto parámetro de mail(), incluso en modo seguro.
  • register_long_arrays: Habilita/deshabilita el registro de las largas variables obsoletas $HTTP_*_VARS.
  • session.hash_function: Selecciona una función de resumen criptográfico (MD5 o SHA-1).
  • session.hash_bits_per_character: Define cuántos bits deben almacenarse en cada caracter cuando se convierten datos binarios de hash a algo más legible (de 4 a 6).
  • zend.ze1_compatibility_mode: Habilita el modo de compatibilidad con el Motor Zend 1 (PHP 4).

Nuevo modelo de objetos

En versiones previas de PHP, los objetos eran manejados como tipos primitivos, por ejemplo enteros y cadenas. En la versión 5 el manejo de objetos en PHP ha sido re-escrito por completo, permitiendo una mejora en rendimiento y muchas características nuevas.

La desventaja de este método era que semánticamente el objeto completo era copiado cuando una variable era asignada, o pasada como parámetro a un método. En el nuevo enfoque, los objetos son referenciados por gestor, y no por valor. Puede pensarse en el gestor como un identificador de objeto.

Los desarrolladores del lenguaje han tenido en cuenta que muchos programadores de PHP no son conscientes siquiera de los detalles que implican las copias en el modelo antiguo de objetos y, por lo tanto, han implementado la versión 5 de tal forma que la mayoría de las aplicaciones funcionarán sin problemas, o con muy pocas modificaciones.

Trabajo con bases de datos

PHP 5 sufrió cambios significativos con relación a la manipulación de bases de datos con MySQL. Los programadores de Zend decidieron no incluir las bibliotecas de cliente en esta versión porque la mayoría de los sistemas actuales ya vienen con esta librería instalada, además, versiones múltiples de ésta en el mismo sistema pueden presentar problemas realmente grandes.

Otro motivo importante para este cambio fue que MySQL utiliza licencia GPL mientras que PHP está bajo una licencia BSD/Apache y este último tipo de licencia no puede distribuir proyectos realizados en el primero. En los siguientes párrafos mostramos la forma de configurar su PHP 5 para trabajar con bases de datos MySQL.

¿Por qué no funciona MySQL en PHP 5?

MySQL está perfectamente soportado en la versión 5 de PHP, el único cambio es que no se encuentra habilitado por defecto.

Para habilitar MySQL en Linux se deberá compilar el código estableciendo en la línea configure la opción --whith-mysql[=DIRECTORIO]; donde DIRECTORIO es la ruta de nuestra instalación de MySQL, por ejemplo: --with-mysql=/usr

Para habilitar MySQL en Windows sólo es necesario editar el archivo php.ini y habilitar el recurso DLL php_mysql.dll que en la versión anterior no existía porque este soporte estaba incorporado en los binarios del motor. También debemos asegurarnos que el archivo libmysql.dll se encuentra en la carpeta de archivos del sistema. Por defecto esta carpeta es: c:\windows\system32\.

Lecturas recomendadas