Un warning " Warning: Trying to access array offset on false in " dans un _pipelines.php

Bonjour,
Dans un plugin maison crée en 2013 sur une base « la fabrique » je réalise une « maintenane » sous spip 4.4.8 php 8.3.6,
j’ai cette erreur signalée dans la ligne du if cette partie est dans la fonction :
function rib_clients_affiche_milieu($flux) { $texte = ""; $e = trouver_objet_exec($flux['args']['exec']); :

	if (!$e['edition'] AND in_array($e['type'], array('gesab_abonnement'))) {
		$texte .= recuperer_fond('prive/objets/editer/liens', array(
			'table_source' => 'rib_abonnes',
			'objet' => $e['type'],
			'id_objet' => $flux['args'][$e['id_table_objet']]
		));
	}

Je ne vois pas ce que fait cette fonction. que me faudrait-il rectifier.
Merci bien

J’ai peut être trouvé une réponse : en explorant sur ce site :

https://www.php.net/manual/fr/language.types.array.php

L’élément de réponse :

Faire référence à un tableau à la sortie d’une fonction ou d’une méthode d’une valeur scalaire qui n’est pas une chaîne de caractères génère null. Antérieur à PHP 7.4.0, ceci ne générait pas de message d’erreur. À partir de PHP 7.4.0, ceci émet une E_NOTICE ; À partir de PHP 8.0.0, ceci émet une E_WARNING.

Je vais tenter de vérifier le contenus des éléments d’Array attendus.
A suivre.

Je pense avoir trouvé un remède :
Dans le pipeline je transforme :

function rib_clients_affiche_milieu($flux) {
	$texte = "";
	$e = trouver_objet_exec($flux['args']['exec']);

	// rib_abonnes sur les gesab_abonnements, gesab_clients
//	ligne originale : if (!$e['edition'] AND in_array($e['type'], array('gesab_abonnement'))) {  transformée par ce qui suit :
	if ($e == ['edition'] AND in_array(array('gesab_abonnement'),$flux['args'] )) {
		$texte .= recuperer_fond('prive/objets/editer/liens', array(

Nope… tu as cette erreur car

  • trouver_objet_exec ne trouve pas d’objet sur certaines pages (c’est normal), donc $e vaut false
  • PHP a été mis à jour dans une version plus récente

La correction est de simplement tester $e tout seul avant le reste, soit $e soit $e !== false soit is_array($e), tu as le choix

- if (!$e['edition'] AND in_array($e['type'], array('gesab_abonnement'))) {
+ if (
+    $e
+    && !$e['edition']
+    && in_array($e['type'], ['gesab_abonnement'])
+ ) {

Merci bien pour cette proposition. qui me fait avancer dans PHP. Je ne connaissait pas l’ajout de && dans un if.
Ce pipeline est généré par le plugin la Fabrique. Cette solution y est-elle mise a jour?

C’est déjà corrigé dans la Fabrique depuis 5 ans : Éviter des notices dans le code généré en PHP 7.4 ; bien tester le résultat de trouver_objet_exec() (3ea6540a) · Validations · spip-contrib-extensions / fabrique · GitLab