Avec l'arrivée prochaine de la version 3.5 stable de joomla, il est temps de tester notre CMS favori avec PHP7. Jusqu'à la version 3.4.8, Joomla n'est pas prêt pour cette version de PHP.

Joomla! et PHP7

Reinhard Kuchenbacker - Flickr

Si on teste une distribution 3.4.8 avec PHP7, on récupère cette Fatal error :

Cannot use Joomla\String\String as String because 'String' is a special class name in /libraries/vendor/joomla/registry/src/Format/Json.php on line 12

Ceci a été corrigé dans la distribution 3.5. Et au moment où j'écris, la version 3.5 Beta 2 est disponible ici ou ici.


Serveurs et hébergeurs

Les serveurs locaux

IMPORTANT : Comme vos sites Joomla sont encore fort probablement en J!3.4.8, il est évident qu'il ne faut pas utiliser la même pile que celle déjà installée, équipée d'une version plus ancienne de PHP.

Comme je travaille sur OSX, je m'appuie naturellement sur MAMP, qui a une fonctionnalité très pratique : via les Préférences, on peut passer sans problème de PHP 5.xx à PHP 7.xx et inversement, sans quitter l'appli.
Il existe une version MAMP pour Windows, cependant, il est toujours recommandé d'utiliser les installations natives (LAMP pour Linux, WAMP pour Windows, MAMP pour Mac, ou XAMPP pour une install cross-platforms.

Donc, pour tester PHP7, il faut d'abord que la pile/stack utilisée soit réglée sur cette version de PHP.

Les piles les plus connues sont mises à jour :

• XAMPP Installers https://www.apachefriends.org/index.html

• EasyPHP http://www.easyphp.org/

• WAMP http://www.wampserver.com/

MAMP https://www.mamp.info/


La solution Bitnami

Si on ne veut pas toucher à l'install serveur/serveur MySQL déjà existante, super réglée au petit poil, il existe toujours l'alternative Bitnami :

• Install WAMP Stack, Download WAMP Stack -> https://bitnami.com/stack/wamp/installer

• Install MAMP Stack, Download MAMP Stack -> https://bitnami.com/stack/mamp/installer

• Install LAMP Stack, Download LAMP Stack -> https://bitnami.com/stack/lamp/installer

Téléchargez celle équipée de PHP7.

La pile Bitnami, contenue, peut parfaitement coexister avec n'importe quelle autre. Il suffit de ne pas les lancer en même temps OU de changer les ports :

• Le port 3306 à 3307 pour MySQL

• Le port 8080 à 8081 pour le webserver

Nota : htdocs se trouve dans le dossier /apache2/


watchful banner cinnk 770x100

Les hébergeurs

Les choses changent et les hébergeurs principaux se sont mis à jour dès la sortie de PHP7.

• Test Joomla! 3.4 with PHP7 now (for advanced users) | 1&1 Community -> http://community.1and1.com/joomla-3-4-php-7/

• Que se cache-t-il sous le capot de PHP7 ? -> https://www.ovh.com/fr/a1948.php7-nouveautes-deja-le-moment-migrer

• O2swtich met en place php7 -> http://hebergeurs.xyz/o2swtich-met-en-place-php7/

Tester J! 3.5 à partir de J! 3.4.8

Pour tester Joomla avec PHP7, il faut donc OBLIGATOIREMENT passer à J!3.5.

1) Mettre à jour via la console admin

A partir du serveur en PHP 5.x, mettre à jour par la console Admin :

IMPORTANT : Dans Configuration -> Serveur -> Rapport d'erreurs à Développement, bien entendu.

Dans les paramètres de Mise à jour de Joomla, régler Canal de mise à jour à Test.

Après Enregistrement, redirection vers cette page :

J'ai dû tester un quinzaine de distributions et en général, la mise à jour se passe bien (hors extensions tierces). Il arrive que des erreurs SQL soient affichées. Retournez simplement au panneau d'administration.

Rien qui ne se règle par Extensions -> Gérer -> Base de données -> Corriger. Il faut parfois activer la Correction une deuxième fois pour que le message attendu s'affiche (La structure des tables de la base de données est à jour.)

2) Mettre à jour comme une extension, via Extensions -> Installation.


joomladay-france-2016

J! 3.5 et les extensions tierces

A l'heure où j'écris, les extensions tierces les plus connues se mettent progressivement à jour, quand c'est nécessaire. Cependant, certains développeurs attendent la sortie de J! 3.5 stable pour adapter leur extension. Auquel cas, les erreurs les plus courantes sont celles-ci :

Fatal error: Cannot use Joomla\String\String as String because 'String' is a special class name in /libraries/vendor/joomla/registry/src/Format/Json.php on line 12

Même erreur que je signale plus haut pour J!3.4.8. Et perte d'accès au back-end. Pour récupérer l'accès au back-end, j'ai remplacé partout dans l'extension Joomla\String\String par Joomla\String\StringHelper.

Opération réussie et... désinstallation de l'extension coupable. Mais ce n'est pas une solution durable !

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP;

Dans PHP7, la nom de la classe doit être différent du nom de la méthode/fonction. En ce cas, l'astuce (soufflée par Peter van Westen, de nonumber.nl) est simple. Prenons l'exemple d'un module.

class modMonmoduleMachin

associé à :

public function modMonmoduleMachin (&$params)

La correction :

public function __construct (&$params)

Cette modification rétablit la fonctionnalité de l'extension sous PHP 7 et évite les Warning(s). Mais encore une fois, laissons aux développeurs le soin d'adapter leur travail aux conditions requises par PHP7.

Array to string conversion

Ici, juste une Notice. Mais l'accès au back-end peut être perturbé. La correction :

if (isset($node->$nodes[$i]))

devient

if (isset($node->{$nodes[$i]}))

Résultat des courses

Ce sont les principales erreurs que j'ai rencontrées. Vous en rencontrerez certainement d'autres, surtout si le/les développeur(s) des extensions n'ont pas mis à jour depuis longtemps.

Conclusion

Le chemin de la mise à niveau vers PHP7 n'est pas semé de roses, mais c'est jouable car J!3.5.x (hors extensions) est paramétré pour cette version de PHP. Je recommande, pour le moment, et même quand J!3.5 Stable sortira, de procéder avec précaution, et pas à pas, en installant d'abord le package puis, progressivement vos extensions sur des sites test, que ce soit en local ou en distant. J'ai un site test qui tourne en PHP7 sur 1&1, pas de souci jusqu'à maintenant.

Avertissement

A ce jour, la sortie de J!3.5.0 Beta 3 est encore dans les tuyaux. Je trouve que c'est une belle version, avec un soin particulier apporté à l'amélioration de l'affichage du back-end.


 

PS : Joomla Beta 3 est sorti le 18 février et cette version de teste est disponible ici : https://github.com/joomla/joomla-cms/releases/tag/3.5.0-beta3