en PHP

Migración a PHp 5.3: primeras experiencias

Por razones que no vienen al caso, me he visto obligado a migrar mi primera aplicación a , cosa que jamás hubiera hecho si no hubiera encontrado otra salida dado que  ha salido hace una semana nada más. Hay algunas cosas que son relativamente fáciles de migrar pero en otras, si no hubiera tenido la suerte que he tenido, todavía creo que andaría buceando en el código en busca del fallo.

Empecemos por las fáciles:

  • __toString ahora no acepta parámetros. Y yo usaba una librería opensource que sí tenía toString con parámetros. La solución ha sido parchearla quitando los parámetros y utilizando func_get_args
  • La función split está deprecated. Gracias a dios, explode hace exactamente lo mismo.
  • Necesitarás utilizar date_default_timezone_set(‘Europe/Madrid’), o tus funciones mktime y date darán muchísimos warnings. También te recomiendan utilizar las nuevas clases relacionadas con Date/Time.
  • Además, ahora si al final de un script y tras el símbolo de cierre (?>) existen espacios vacíos, ya no te dejará hacer un header(“location:”) porque te dirá que “headers already sent“. Esto hasta ahora sólo pasaba si tenías caracteres vacíos antes del comienzo de script (<?).
  • PHP ha mejorado los errores que detecta. Ahora si hay caracteres estraños en tu archivo de texto, te dará un warning. Si tienes algo de código que copy/paste-aste en su momento, puede que ahora te salgan fallos que antes no salían.

Respecto a errores no tan evidentes:

  • ereg() y sus variantes ya no existen. Si, como yo, la utilizabas para casi todo, tendrás que migrar a preg_match y sus variantes. “preg” funciona con las expresiones regulares de PERL, que no son iguales a las de PHP. Con lo que aquí toca ponerte a cambiar expresiones regulares. Yo no sabía que existía una manera bastante fácil de hacerlas compatibles… aún y todo habrá que ir cambiando una a una. 
  • Además, los deprecated dan su propio error E_DEPRECATED, que equivale básicamente a un fatal error, con lo que el script  no seguirá ejecutándose.

 Pero lo que me ha llegado al alma es que el módulo de MSSQL no interprete igual las fechas. Mi caso es raro. Casi ninguno tendréis una aplicación de PHP que funcione contra un SQLSERVER y que se encuentre sobre un Mac OS X Leopard en un ordenador PowerPC. Os aseguro que os costará encontrarán una configuración tan rara. El caso es que hasta ahora SQLSERVER traducía las fechas tipo ‘2009-12-09′ al idioma en el que estuviera configurado. Pero ahora no lo hace. Así que si tu formato de fecha está localizado en España, tendrás que poner tods las fechas como ’09-12-2009′.  Gracias a un buen diseño orientado a objetos (y a mucha suerte), cambiar el formato de fecha sólo ha sido ir a un método e invertirlo.

 Para hacer la migración me he basado en: http://techportal.ibuildings.com/2009/06/30/migrating-to-php-5-3/. y http://es2.php.net/migration53.

 Os aconsejo valorar muy mucho el migrar vuestras aplicaciones a PHP 5.3. No es nada sencillo y hace falta bastante coraje. Imagino que, con el tiempo, aparecerán más guías y ayudas que permitirán hacer menos dolorosa la migración.

Espero que éste artículo os ayude un poco…

Escribe un comentario

Comentario

  1. Bueno. Si querés expresiones regulares tenés preg_split(). Me parece mejor alternativa.