Hoy he actualizado mi servidor a Php 5. Esta nueva versión tenía algo de fama de SP2 en el mundillo web, debido a que se habían realizado algunos cambios que podían romper programas escritos para versiones anteriores.
Si algo malo puede pasar, pasará.
El blog y algunas secciones de la página han estado caídos durante un rato. El primer problema (el más importante) que ha surgido ha sido
Fatal error: Only variables can be passed by reference in /var/www/blog/wp-includes/gettext.php on line 66.
He encontrado nuevas versiones del archivo gettext.php con el mismo problema, e inclso parches que solucionaban parcialmente el problema pero que generaban otros errores leves. Al final he encontrado un post de ayuda en la web de WordPress (Localization Problems « WordPress Support), que sugería sustituir
return array_shift(unpack('V', $this->STREAM->read(4)));
que anda por la línea 66 de gettext.php (en la carpeta /wp-includes/), por
$tmp = unpack('V', $this->STREAM->read(4));
return array_shift($tmp);
Y hacer lo mismo con la función que la sigue (sólo varía la ‘V’, que en este caso es ‘N’).
Luego he visto más problemas en funciones mías, pero eran bugs tontos de mi código (p. ej por usar $HTTP_GET_VARS cuando las tengo desactivadas; solución: $_GET).
Luego he tenido un problema misterioso y dificil de reproducir, pero mis sospechas caían en el plugin wp hashcash, que sirve para evitar el spam de los comentarios. Al desactivarlo he visto que todo iba más o menos bien. Hay una versión nueva que intentaré instalar mañana.
Y lo último que me ha fastidiado PHP 5 es la búsqueda con la API de Google, debido a dos cosas: En primer lugar la biblioteca nusoap.php ha quedado obsoleta (creo) y en segundo lugar, PHP 5 incorpora su propio módulo SOAP. Por suerte he encontrado un excelente artículo en francés, Api Google et SOAP, que detalla una API con ejemplos. Sólo he tenido que cambiar las funciones y llamadas en mi script.
Espero que esto se traduzca en mayor estabilidad y rapidez, porque ha sido una pequeña pesadilla.
He encontrado otro fallo, esta vez culpa de WordPress (aunque aseguren ser compatibles con PHP 5). Se trata del archivo classes.php del directorio wp-includes, que en su línea 629 tiene algo así como
$category = &get_category($this->get('cat'));
que no es válido en PHP 5 (bueno, sí que vale, pero quiere decir otra cosa), y debe sustituirse por:
$crom = $this->get('cat');
$category = &get_category($crom);
(Vía Ayuda de WordPress)