(modifié le 2 novembre 2010 à 23:09)

Suite au passage à PHP 5.3.x sur l'un de mes serveurs, l'interface de Centreon ne fonctionnait plus. Dans mon cas c'était suite à l'upgrade de Ubuntu 9.04 vers Ubuntu 10.10.

Symptôme

La page Centreon renvoie une erreur sur du code PHP déprécié, ce qui chamboule l'interprétation du code PHP. En effet l'erreur s'insère directement dans la page et empêche session_start() de fonctionner, puisque aucun caractère ne doit être envoyé avant l'utilisation de session_start().

Voici le contenu du message d'erreur renvoyé dans le code source de la page d'authentification (assorti du message 'Invalid User' en rouge) :


Deprecated: Assigning the return value of new by reference is deprecated in /usr/local/centreon/www/index.php on line 160

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/local/centreon/www/index.php:160) in /usr/local/centreon/www/class/Session.class.php on line 49
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/local/centreon/www/index.php:160) in /usr/local/centreon/www/class/Session.class.php on line 49

De ce fait il est impossible de se connecter à la console Centreon.

Voici deux solutions pour corriger ce problème.

La solution propre

En PHP5, le passage par référence est systématique sur new, donc l'ampersand "&" n'a plus lieu d'être. Dans le fichier /usr/local/centreon/www/index.php (le chemin peut varier suivant les installations), trouver la ligne 160 :

$user =& new User($centreonAuth->userInfos, $generalOptions["nagios_version"]);

et la remplacer par :

$user = new User($centreonAuth->userInfos, $generalOptions["nagios_version"]);

C'est tout ! Maintenant tout devrait fonctionner.

La solution "crade"

La deuxième solution consiste à inhiber les messages renvoyé par PHP concernant la dépréciation. L'effet est immédiat et Centreon fonctionnera de nouveau.

Localiser votre fichier php.ini (généralement dans /etc/php5/apache2/php.ini) :

[shell]locate php.ini[/shell]

Editez le fichier :

[shell]nano /etc/php5/apache2/php.ini[/shell]

Puis localiser la chaine : error_reporting = E_ALL & ~E_NOTICE

Remplacer cette chaîne par :

[shell]error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED[/shell]

Relancer le service Apache :

[shell]/etc/init.d/apache2 restart[/shell]

Maintenant tout fonctionne !

Attention : cette modification n'est pas idéale car elle peut masquer des erreurs importantes,  surtout si vous développez sur ce même serveur. Cette solution est temporaire, en attendant que Centreon fasse évoluer son code source dans une future version (v2.1.9 actuellement).

Conclusion

Si vous avez de nombreux serveurs qui utilisent Centreon, attendez que Centreon corrige ce "bug" avant de passer à PHP 5.3.x via les mises à jours systèmes. En revanche, si vous êtes un jedi du monitoring cette manipulation ne vous posera guerre de souci.

TJ28N0-P5HY0C-MVAPAA-XYK65T-9JB9FF-FTQ4YR

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter