String JSON non valide UTF-8 via cron()

Bonjour à tous,

Je me décide à faire appel ici car je galère depuis deux jours et je n’arrive ni à comprendre ce qui se passe, ni à comprendre comment je peux avancer plus.

Je suis sur mon RPi5 de Dev pour un plugin sous Debian 12.8 et Jeedom 4.5 (voir page Santé ci-dessous).

En PHP, j’ai une méthode importData dans ma classe principale du plugin qui réalise un import de données d’un serveur.
Cet importData fait appel à un script Python (basé sur aiohttp).
La donnée récupérée de cette méthode est une string JSON.
Je précise que la string JSON possède des caractères français accentués (comme le é).

Dans ma classe principale, je fais appel à cette méthode importData de 2 manières différentes:

  1. En l’appelant à partir d’une function quelconque toto()
  2. En l’appelant à partir de la static function cron()

Je n’obtient pas le même résultat …

  1. avec l’appel toto(), cela fonctionne comme attendu, ma string JSON est correcte.
    Un log dans la routine Python qui fait la requête HTTP montre dans la réponse les caratères accentués → OK

  2. avec l’appel cron(), la string JSON n’est pas valide UTF-8 et j’ai ensuite des erreurs de traitement dues à cela.
    Un log dans la routine Python qui fait la requête HTTP montre dans la réponse un ? à la place des caractères accentués.

J’ai fait des essais multiples et réduit mon code pour les essais au strict minimum pour n’avoir que ce qui est décrit plus haut.

Il n’y a qu’avec l’appel à partir de cron() (et cron5 …) que j’obtiens une réponse erronée ???

Qu’est-ce qui peut bien générer cette différence ?
Des idées qui pourraient m’aider ?
Merci d’avance …

Page Santé

Bonsoir,

il faudrait voir comment tu procède dans ton cron(),
json_decode ?

Bonjour @Phpvarious ,

Merci pour ton message.
Le problème ne vient pas de mon code (assertion à 99% :thinking:).
J’ai fait beaucoup de manips.
Je pencherais pour un problème de variable d’environnement ou config Apache ?
Demain matin, je reformulerais mon message pour re-adresser la question …

Salut,

Machine et php installé comment ?

Ton cron exécute ton code via php cli
L’ajax c’est celui configuré sur apache.

Si tu as installé des versions à la main t’as pas forcément la même config.

Bonjour @Mips ,

Merci pour ton retour.

Mon installation est basique:

  • RPi5 sur lequel j’ai installé l’image Raspberry Pi OS
  • puis installation de Jeedom

J’ai ré-éditer mon premier message pour être plus précis.
Même en lancant la fonction importData à partir de la classe principale, (sans appel Ajax donc), le résultat attendu est correct.

Il n’y a qu’à partir de CRON() qu’apparement, le serveur répond un message erroné ???

J’en déduit que dans Jeedom, le traitement avec cette fonction Cron() n’utilise pas A L’IDENTIQUE la configuration classique.

A quel niveau ? Apache ?
Je ne connais pas assez bien Jeedom pour trouver tout seul.

Ajax ou dans ta class c’est pareil, c’est dans apache

Je ne connais pas ca par coeur mais cherches sur le net ou et comment configurer php pour apache vs cli pour vérifier que tu n’as pas de différence à ce niveau

Edit: CLI = command line interface au cas où c’était pas clair
Donc c’est le fait d’appeler un script php avec la commande php mapage.php, ce que fait le cron

Merci pour tes guidelines.

Histoire d’avancer, j’ai mis un log dans ma function PHP qui est appelée pour afficher les données de phpinfo().

Début des infos quand c’est OK. Il me semble que c’est normal.

phpinfo()= "<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"DTD\/xhtml1-transitional.dtd\"> ......

Début des infos avec appel de la fonction via cron():

phpinfo()= "phpinfo()\nPHP Version => 8.2.26\n\nSystem => Linux RPi5-2 6.6.62+rpt-rpi-2712 .....

Je ne suis pas un spécialiste de la configuration PHP mais cela ne semble pas très normal.

A ce stade, je pense qu’il serait bien que quelqu’un de Jeedom regarde peut être et donne son avis sur la question ?