Cómo migrar tus aplicaciones de PHP4 a PHP5
En la versión 5 se han mejorado significativamente las capacidades de PHP. Pero muchos desarrolladores todavía no pueden hacer uso de sus bondades por el poco soporte que aún existe para esta versión. Zend nos anuncia que dejará de dar soporte a la versión 4 dentro de muy poco tiempo y con esto nos obliga a migrar hacia la última versión estable del lenguaje, PHP 5.
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\.
“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…”
¡Ah!, pensaba que había prisa
Gracias por el documento. Así da gusto. Feliz 2008.
Muy buen artículo. Solo me queda la duda de los módulos ISAPI que según en el artículo se pueden utilizar en Apache. Yo sabía que estos se configuran en Windows IIS Server (de ahí el nombre de ISAPI) y que las DLL se hacían en Apache. Pueden explicar más a detalle este punto?.
Por lo demás esta excelente.
Joakkinen:
Este artículo fue escrito en el mes de diciembre del 2007, pero por el volumen de artículos que tienen los editores para revisar, no fue publicado hasta hoy.
Es por esto que dice “…lo que queda de año…”; se refiere al que terminó recientemente.
¡Salud y suerte a todos en este 2008! 😉
Juan Manuel Lemus:
Esta es una característica de Apache sobre Windows. Apache también puede cargar extensiones ISAPI como lo hace IIS. Sin embargo, NO PUEDE cargar filtros ISAPI.
Aquí te dejo la documentación del sitio oficial sobre el módulo mod_isapi que se utiliza para esto:
Apache 1.3:
http://httpd.apache.org/docs/1.3/mod/mod_isapi.html
Apache 2.0:
http://httpd.apache.org/docs/2.0/mod/mod_isapi.html
Juan Manuel Lemus:
Cuando se habla de los módulos ISAPI se refiere a Apache sobre Windows, en el que también se pueden cargar extensiones ISAPI como lo hace el IIS de Microsoft.
Aquí te dejo la documentación oficial del módulo mod_isapi que se utiliza para esto:
Apache 1.3:
http://httpd.apache.org/docs/1.3/mod/mod_isapi.html
Apache 2.0:
http://httpd.apache.org/docs/2.0/mod/mod_isapi.html
Yo estoy haciendo el cambio a php5 y me da fallo al conectar al servidor. Os explico: utilizo la librería adodb para conectar a un sql server. Con php4 no tenía ningún problema, pero ahora, con php5, no me conecta.
He bajado la versión de adobd para php5 pero sigue sin conectar. Alguno me puede echar una mano?? Gracias por la ayuda y por el artículo.
Buenas tardes,
trabajo en una consultora y actualmente estamos buscando un consultor instructor para una cosultoría/curso en España que trata sobre las diferencias entre PHP4 y 5 y los problemas que te encuentras en las migraciones de aplicaciones. Si alguno de vosotros que ya tiene un montón de experiencia en estas lides os interesa colaborar podéis dejarme vuestros datos en [email protected]
Mil gracias a todos
[…] Cómo migrar tus aplicaciones de PHP4 a PHP5www.maestrosdelweb.com/editorial/como-migrar-tus-aplicacione… por momo77 hace pocos segundos […]
Hay que ir pensando que pronto habrá que ir hablando de como migrar de php5 a php6 😉
[…] Cómo migrar tus aplicaciones de PHP4 a PHP5 (tags: php) […]
Muy interesante la nota, justamente yo estoy aprendiendo PHP 5 y 6, para implementarlos en futuros proyectos.
Por casualidad, algún interesado en adquirir este dominio?: http://www.golpemaestro.com
Que manual de PHP 5 recomendais? Uno que sea claro, completo y conciso.
Gracias
[…] Un recurso interesante que hemos encontrado, orientado a desarrolladores, que seguro apreciarán a la hora de migrar sus aplicaciones a PHP 5: “Cómo migrar tus aplicaciones de PHP4 a PHP5“. […]
Para habilitar MySQL en PHP5 en Windows, como habilito el recurso DLL php_mysql.dll en el archivo php.ini
Recien comienzo y no puedo conectar a una base en mySQL 5 con PHP5
Gracias
Necesito alguien que me ayude con mi página, que sepa php y sea preferiblemente de Colombia y mejor si esta en Bogotá. [email protected]
Desde la empresa de hosting donde estoy alojado me ofrecen una plan con muchas más ventajas y la mismo precio que el que tengo, pero la diferencia es que funciona bajo PHP5 y las dos únicas aplicaciones que tengo no funcionan.
No tengo conocimientos de php como para reprogramar dichos scripts, pero sí para adaptarlos a mi web. Los saqué de portales de desarrollo web como libres de uso.
No veo ninguna ventaja para cambiar, he observado que la mayor parte del código escrito “listo para usarse” está para PHP4 o no pone nada.
¿Dónde puedo encontar código que sea compatible con php5?
En el servicio de distribuidor que me ofrecen no permiten instalar php4 en el servidor.
Un saludo y gracias por la página
Saludos..!
Estoy intentando correr en “batch” el proceso libera o envia mensajes a una lista de correos (haciendo uso del programa PHPList). Para lo cual tome indicaciones de otros foros indicando como programar una tarea en windows.
Hasta ahí, todo bien… pero cuando intenta ejecutar el proceso php no lo ejecuta por el siguiente error:
php-win – No se encuentrala DLL
No se encuentra la biblioteca de vínculos dinámicos OCI.dll en la ruta especificada.. etc, etc
y luego aparace otro pero buscando el php6.dll
Pues bien, busqué y veo que OCI.dll es para Oracle? ..y PhPList usa MySQL ..y lo otro es que esta en PHP v 5.2.9.
Alguien podría guiarme o ayudarme??
Sistema Oper. del server: Windows 2000 SP4
PHP version 5.2.9 (instalado como modulo apache)
Apache version 2.x
MySQL version 5.1.33
Archivo crontask.bat
X:\php529\php-win.exe “X:\apacheHttp\htdocs\lists\admin\pq.php” > X:\apacheHttp\htdocs\lists\admin\cron.log
Archivo pq.php
Gracias a todos..
Eric
[…] En el blog maestros del web, un artículo publicado el 3 de enero de 2008 enunciaba algunos temas al respecto de PHP que son un buen ejemplo sobre lo que hago referencia: “En la versión 5 se han mejorado significativamente las capacidades de PHP. Pero muchos desarrolladores todavía no pueden hacer uso de sus bondades por el poco soporte que aún existe para esta versión. Zend nos anuncia que dejará de dar soporte a la versión 4 dentro de muy poco tiempo y con esto nos obliga a migrar hacia la última versión estable del lenguaje, PHP 5.” Para leer más sobre el caso. […]
No tengo ni idea de programación. El caso es que llevamos la página de una protectora de animales con la que colaboramos, trabajammos con frontpage y queremos ampliar la capacidad en el servidor. Hicimos la consulta para ampliar y nos contestan lo siguiente:
Su actual alojamiento con Hostalia, es un PLAN INICIO que utiliza un panel de control “Cpanel”. Puesto que estos paneles de control se están retirando, al necesitar más espacio, el cambio supone un trámite diferente, tendríamos que darle de alta el servicio con un panel de control “Plesk”.
El procedimiento sería del siguiente modo:
Al activar el plan de alojamiento con Plesk, le enviamos un correo con las claves de acceso al panel de control del mismo para que pueda subir una copia de la página web y crear las mismas cuentas de correo que está utilizando actualmente. MIGRAR EL CONTENIDO AL NUEVO PLAN.
Una vez tenga todo el contenido subido al nuevo plan, nos tendría que avisar para hacer el cambio de apunte de las DNS al nuevo plan. El proceso es bastante rápido, de modo que puede que únicamente tenga un pequeño corte en el servicio.
IMPORTANTE:
Decirle que pasaría a un servidor con versiones de PHP5 y MySQL5, por lo que es necesario que revise su programación antes de aceptar el cambio, para asegurarse que va a funcionar sin problemas en el nuevo servidor.
LA PREGUNTA ES ¡Puedo seguir trabajando con frontpage?
Gracias a todos y un saludo.
andres claro puedes seguir con frontpage es muy aparte de php frontpage lo usas para hacer paginas html.
pero tambien puedes ponerle codigo ahi mosmo en frontpage de php y subirlo a un servidor con soporte php.
yo uso xampp es muy bueno no se necesita configurar nada.
antes usaba easy php version 1.8.tenia un codigo php para conectarme ala base de datos mysql y funcionaba bien en easy php mas con xampp no logra funcionar pienso ke es un codigo de conexion vieja ke solo lo lee php4 y no php 5 del xammp