Zend, ccsid et IFS

configuration Apache, Zend et PHP , Web services
Répondre
LoicSchmidt
Messages : 2
Enregistré le : ven. 08 janv. 2021, 14:48:53

Zend, ccsid et IFS

Message par LoicSchmidt »

Bonjour,

je développe actuellement une API Rest en PHP sur Zend (donc hébergé sur l'IBMi) pour rendre accessible des données et des fichiers via HTTP et je rencontre un problème d'encodage.

J'ai actuellement une fonction SQL générant un PDF qui, lorsque je l'appelle me créé un fichier PDF sur l'IFS :
"VALUES createPdf('PARM1', 'PARM2', 'CheminIFSOuDeposerLeFichier')"
Je n'ai aucun problème pour lire ce fichier, il est bien généré lorsque je l'appel depuis STRSQL.

En revanche, lorsque j'appelle la même fonction (donc la même requête SQL) depuis Zend avec db2_exec, le fichier généré n'a pas le même encodage et est illisible.
C'est un problème d'encodage car lorsque je fais un diff entre les deux fichiers, certains caractères passent d'accent à {, ou au petit losange "?". Certains \ sont transformés aussi.
J'ai essayé de convertir le contenu de ce fichier via PHP et les fonctions utf8_encode, utf8_decode, ou encore mb_convert_encoding avec du mb_detect_encoding, mais rien n'y fait.
J'ai vérifié les CCSID de mon profil IBMi, de celui de QUSER et de QTMHHTTP, ainsi que celui dans la configuration de Zend, et tous sont en 297. Pareil pour QCCSID.
Je ne sais plus où chercher.

Avez-vous déjà fait face à ce comportement ?

Merci pour vos retours.

Gautier DUMAS
Messages : 4
Enregistré le : lun. 31 août 2020, 17:06:19

Re: Zend, ccsid et IFS

Message par Gautier DUMAS »

Bonjour,

Quelles sont les versions du Zend Server et du PHP ?

Côté PHP+DB2, la directive ibm_db2.i5_override_ccsid permet de configurer le CCSID du JOB DB2 depuis php. A configurer dans le php.ini du Zend Server (depuis l'interface graphique d'administration du Zend Server).

L'apparition des { et losanges noirs font également penser à l'utilisation du CCSID américain (37) dans le fastcgi.
Si installation par défaut et Zend Server récent, voir le fichier /www/zendphp7/fastcgi.conf pour modification de ce CCSID (ou dans les menus 5250 du Zend Server).

Bien cdlt,

LoicSchmidt
Messages : 2
Enregistré le : ven. 08 janv. 2021, 14:48:53

Re: Zend, ccsid et IFS

Message par LoicSchmidt »

Bonjour Gautier,

merci pour la réponse.

Voici les informations de versions "Zend Server for IBM i 9.1.10 ( PHP 7.1 )" sur une V7R4.

Après vérification de tous ces CCSID (dans fastcgi.conf et dans httpd.conf) et après quelques essais de changement des directives ibm_db2, tout était bien configuré.
C'était tout simplement le DefaultFsCCSID = 297 dans httpd.conf qu'il me fallait (et que j'avais configuré correctement), mais les restart ZENDPHP7 dans l'admin HTTPAdmin ou dans celle de Zend ne prenaient pas en compte les modifications. J'ai essayé aussi les restart apache et zend via GO ZENDPHP7/ZSMENU, pareil.

Pour je ne sais quelle raison, seul un ENDTCPSVR SERVER(*HTTP) suivi d'un STRTCPSVR semble prendre en compte les modifications de httpd.conf. En mettant des mauvaises valeurs à ibm_db2.i5_override_ccsid, j'ai planté Zend, et c'est en tuant les travaux de QHTTPSRV pour le relancer que je me suis aperçu de ce comportement.

Merci pour votre aide, j'ai maintenant mon PDF correctement encodé !

Répondre