Voilà PHP 8.0 et 8.1

Bonjour,

Nous venons d’ajouter sur notre plateforme les versions 8.0 et 8.1 de PHP.

Rendez-vous sur Ouvadmin pour sélectionner l’une de ces versions. Rien d’autre à faire … en cas de dysfonctionnement sur le site, il suffit de revenir à une version de PHP antérieure (il faut compter une trentaine de minutes pour que le changement soit effectif).
Si vous ne savez pas ou plus comment faire, consultez la documentation dédiée aux changements de versions de PHP.

Il est recommandé de vérifier, avant de changer la version, que votre site utilise bien un logiciel compatible avec PHP 8. :slight_smile:
Idéalement il faut mettre à jour votre CMS (Wordpress, SPIP, Joomla etc) ainsi que tous les plugins et thèmes, avant de modifier la version de PHP !

Nous ajouterons fin novembre la version 8.2 qui va prochainement être publiée par PHP.
Nous allons également supprimer définitivement les versions obsolètes de PHP (5.6, 7.1, 7.2 et 7.3) de nos serveurs pour améliorer la vitesse de mise en ligne de vos nouveaux espaces web et la vitesse de bascule d’une version de PHP à une autre.

2 Likes

Un petite subtilité si vous utilisez Joomla 4, il faut modifier les deux fichiers libraries/src/Filesystem/Folder.php et libraries/src/Filesystem/File.php pour y remplacer les occurrences de :

@set_time_limit(ini_get('max_execution_time'));

par :

if (function_exists('set_time_limit')) {
    @set_time_limit(ini_get('max_execution_time'));
}

La comportement de l’opérateur de contrôle d’erreur @ n’est plus le même en PHP 8, ce qui provoque sur notre plateforme une erreur bloquante sur Joomla 4 en PHP 8.x, sans ces modifications.

1 Like

Bonjour,
À noter aussi que Dolibarr 16 n’est pas encore pleinement compatible avec PHP 8.0 et 8.1. Il faudra attendre Dolibarr 17 à priori.
Merci pour l’upgrade :man_bowing:

2 Likes

Bonjour à tous,
Deux compléments si ça peut aider :

  • Curieusement, l’erreur set_time_limit survient en version 8.X, même avec Joomla 3.10… et la correction conseillée est efficace. Merci Matthieu !
  • Pour ceux qui utilisent le composant Akeeba Backup de Joomla, il faut faire les mêmes corrections dans les fichiers de même nom dans le dossier libraries/vendor/joomla/filesystem/src/

Je suppose qu’il y a une bonne raison pour ne pas activer la fonction set_time_limit, mais laquelle ?
S’il est prévu que la réactivation n’intervienne jamais, on pourrait simplement supprimer ces lignes.
En tout cas, je garde cette information précieusement puisqu’elle risque d’être fort utile lors des prochaines mises à jour.

1 Like

Bonjour,

Merci pour ces compléments !

La fonction set_time_limit() est problématique sur une plateforme mutualisé comme la notre en cas de scripts trop gourmands, défectueux ou malveillants. Elle peut permettre de prolonger trop longtemps un script de ce genre ce qui peut avoir des conséquences négatives sur l’ensemble des sites hébergés.

Certains CMS comme Nextcloud par exemple réalisent une vérification et râlent si set_time_limit() n’est pas là, mais ils fonctionnent quand même. Malheureusement Joomla utilise @ (voir plus haut) pour ça et ce @ ne fonctionne plus de la même façon depuis PHP 8, ce qui provoque maintenant une erreur bloquante qui n’est plus ignorée.

1 Like

Bonjour,
Je continue de tester les fonctions de Joomla!.. et c’est vaste !
J’ai déniché une autre occurence d’appel à set_time_limit() et qui plante les mises à jour sous PHP 8.1 :

  • libraries/src/Installer/InstallerHelper.php
    Même traitement et même succès, mais je crains qu’il y en ait d’autre(s)…

Mise à jour 15 h plus tard :
Fichiers concernés chez moi, mais ça doit être différent en fonction des modules, plugins, etc. :

  • administrator/components/com_finder/controllers/index.php
  • administrator/components/com_finder/controllers/index.json.php
  • administrator/components/com_jce/models/profile.php
  • libraries/fof30/Cli/Traits/CGIModeAware.php
  • libraries/joomla/archive.zip.php
  • libraries/regularlabs/src/File.php
  • libraries/scr/Application/DaemonApplication.php
  • libraries/src/Filesystem/File.php
  • libraries/src/Filesystem/Folder.php
  • libraries/src/Installer/InstallerHelper.php
  • libraries/vendor/joomla/filesystem/src/File.php
  • libraries/vendor/joomla/filesystem/src/Folder.php
  • libraries/vendor/phpmailer/phpmailer/class.smtp.php

J’ai utilisé la fonction de recherche dans le contenu des fichiers sur « set_time_limit » et c’est ce que je conseille.

Il me semble qu’une solution plus pérenne serait de trouver un moyen de remplacer la fonction d’origine par une fonction « blanche » qui ne ferait rien. Enfin, rien d’autre que d’éviter l’erreur…

1 Like

Bonjour

Pour les utilisateurs de Garradin : ne supporte pas les php 8.x (y compris la dernière version 1.1.30 ) ; il faut rester en 7.4

1 Like

Bonjour,
En fait, j’aurais dû commencer à chercher par là :
C’est tout bête, dans le index.php de la racine, en tout début de fichier, la ligne juste après le "<?php", insérer :

if (!function_exists('set_time_limit')) {
function set_time_limit($a) {}
}

Jusque là, ça a l’air de marcher. À voir à l’usage !

1 Like