Bug PHP 8.2

Bonjour

Avertissement: ceci, juste pour aider et ou comprendre.

A ce jour je cherche à me débarrasser de petit bug actuellement non bloquant.

Après analyse, je me suis attaquer à un warning récurent chez moi, mais non bloquant dans le log http.error lié surtout apriori à la version de PHP 8.2:

0138|[Sat Jan 17 09:07:36.789582 2026] [php:warn] [pid 620590:tid 620590] [client 192.168.1.14:51610] PHP Warning:  Undefined array key 1 in /var/www/html/core/class/cmd.class.php on line 1678
0139|[Sat Jan 17 09:07:36.789674 2026] [php:warn] [pid 620590:tid 620590] [client 192.168.1.14:51610] PHP Warning:  Undefined array key 1 in /var/www/html/core/class/cmd.class.php on line 1682

Explication:

J’ai repéré la page qui envoyait le warning, puis repéré avec l’aide d’un ancien développeur de jeedom qui habite à coté (aujourd’hui anonyme mais qui continue discrètement) qui m’a aidé à chercher et à comprendre, donc après j’ai repérer ma tuile qui à priori déclenchait ce warning (pas compliqué j’avais qu’une tuile sur cette page (bonheur) :pray:.
Cette commande est liée à une de liste de choix sous le format et ce depuis 3ans: Aucuns;Pelouse;Potager;Robinet ext;Haie;Terrasse

Aujourd’hui étant sous débian 12 php8.2 et jeedom 4.5, la version PHP passait sous
silence le warning, mais maintenant non: et une question m’a brulé les lèvres, pourquoi? :sweat:
Ma réflexion perso; si cela était le cas, avec la version 8.2 doit signifier, alerte à la prochaine version si pas de correctif au fichier PHP je bloquerai le système. (bon j’exagère surement).

  • Donc je revois la syntaxe de cette liste je m’aperçois qu’il faut faire : Aucuns|Aucuns;Pelouse|Pelouse;Potager|Potager;Robinet ext|Robinet ext;Haie|Haie;Terrasse|Terrasse

Bon cela ne change rien, toujours le même warning, bon je vais dans le
fichier php.

  • Donc je prend une partie du code qui entoure les lignes warning concerner du fichier et je l’envoi à IA
if (is_object($cmdValue) && $cmdValue->getType() == 'info') {
					if ($cmdValue->execCmd() == $coupleArray[0] || $cmdValue->execCmd() == $coupleArray[1]) {
						$listOption .= '<option value="' . $coupleArray[0] . '" selected>' . $coupleArray[1] . '</option>';
						$foundSelect = true;
					} else {
						$listOption .= '<option value="' . $coupleArray[0] . '">' . $coupleArray[1] . '</option>';
					}
				} else {
					if (isset($coupleArray[1])) {
						$listOption .= '<option value="' . $coupleArray[0] . '">' . $coupleArray[1] . '</option>';
					} else {
						$listOption .= '<option value="' . $coupleArray[0] . '">' . $coupleArray[0] . '</option>';
					}
				}


et me répond, corrige avec ceci. (remplace les lignes de 1678 à 1689)

if (is_object($cmdValue) && $cmdValue->getType() == 'info') {
    if (
        $cmdValue->execCmd() == $coupleArray[0] 
        || (isset($coupleArray[1]) && $cmdValue->execCmd() == $coupleArray[1])
    ) {
        $listOption .= '<option value="' . $coupleArray[0] . '" selected>' . $coupleArray[1] . '</option>';
        $foundSelect = true;
    } else {
        $listOption .= '<option value="' . $coupleArray[0] . '">' . (isset($coupleArray[1]) ? $coupleArray[1] : $coupleArray[0]) . '</option>';
    }
} else {
    $listOption .= '<option value="' . $coupleArray[0] . '">' . (isset($coupleArray[1]) ? $coupleArray[1] : $coupleArray[0]) . '</option>';
}

et à ce jour, plus de warning pour ce type (liste de choix).
J’espère apporter ma p’tit contribution sous forme de pertinence au développeurs.

Et là c’est mon premier message de cette nature, je vais m’attaquer au plugin CloudSync qui ne comprend pas les cases vides ou nul (toujours lié à version PHP8.2)

Merci de m’avoir lu et vous souhait un Bon weekend
Aujourd’hui il pleut donc je vais continuer.

N’hésiter pas à confirmer ou affirmer ou autres

1 « J'aime »

En vue macro et sans être un expert ni en php ni du core,

en effet ça semble râler parce que $coupleArray[1] n’est pas défini et donc on ne peut pas le comparer à quelquechose d’autre

du coup l’IA a mis partout des tests isset($coupleArray[1]) ce qui permet de s’assurer qu’il existe avant de tester sa valeur.

c’est une stratégie.

une autre stratégie serait de l’initialiser avec une chaîne vide (probablement un peu plus haut dans le code) comme ça vous êtes sûr de pouvoir le comparer

En gros, il vaudrait mieux traiter en amont pourquoi $coupleArray[1] n’est pas initialisé

C’est un exemple classique de problème avec l’utilisation de l’IA: son analyse ici est très superficielle autour des lignes où le problème se manifeste et pas forcément là ou le problème a été généré.

Je me suis fais prendre récemment: à vouloir corriger un « bug » dans le plugin agenda, ma première correction générait un effet de bord qui faisait que cela ne marchait plus dans un autre cas.

1 « J'aime »
  1. Le sujet que vous pointez n’a pas de rapport et n’apporte aucune solution sur ce sujet ci
  2. Cessez de tag des utilisateurs pour demander de l’aide, encore plus lorsque vous taggez la mauvaise personne !