IBMi V7R5 でPHP iToolkit ⇔ QXMLSERV 文字化け？

IBMi OS V7R5 にバージョンアップして以来、PHP iToolkit のコマンドが（例えば **DSPLIBL** ）文字化けする。
原因を調査しても、一向に分からず、IBMサポートの方と3ヶ月ほどやりとりしたが、全然解決しない。

## 解決
結論から言うと、原因は分からないが、TR3が利用したくて最新のPTFを当てたら文字化けしなくなった。

IBMさん側では、「解決となる様な修正はないとのこと」。釈然としないが、同じことに遭遇してしまう、運の悪い方もいるかも知れないので、現象だけ記録に残しておく。

## PHP iToolkit って

-[zendtech/IbmiToolkit](https://github.com/zendtech/IbmiToolkit)
そもそも、「**PHP iToolkit**」 って何？って事ですが、PHPでXMLの入出力を介して、プログラム連携やコマンド連携を簡単に出来る便利なライブラリ。もちろんの [**CS^2**](https://www.cscweb.jp/solution/cscs/) にもバンドルされており、新しいバージョン **CS^2** がリリースされると **Toolkit** の動作もテストしている。そして今回は V7R5 のテストで引っ掛かた訳だ。私も敬愛する **Alan** もコントリビューターだ。
IBMi 側の XML 仲介役は **QXMLSERV** が IBMi 導入時に提供されている。 Zend Server 時代は、Zend系ライブラリに内包されていた。
てっきり、うまく行かないのは、この **QXMLSERV** が原因だと思っていたが、 **V7R5** では特に改修が入っていないらしい。

## NGだった現象

以下の例の様なソースで V7R4 では正常に動作し、V7R5 では文字化けが発生した。 
```php:DSPLIBL.php
$dbCon = db2_connect($db,$user,$pass);
$tkit = ToolkitService::getInstance($dbCon);
$tkit->setToolkitServiceParams(array('stateless'=>true, 'plug'=>"iPLUG5M"));

// *CMD
// "CLInteractiveCommand - DSPLIBL";
$output = $tkit->CLInteractiveCommand("DSPLIBL");
db2_close($dbCon);

```

**Toolkit** の XML ログ出力結果を比較すると次の様に異なっていた。
```xml:V7R4.xml
Creating new conn with database: 'Resource id #8', user or i5 naming flag: '', transport: 'ibm_db2', persistence: ''
Re-using existing db connection with schema separator: .
Exec start: 2023-09-22 18:36:32
Version of toolkit front end: 1.8.5
IPC: ''. Control key: *cdata *here *pase(1208)
Stmt: call QXMLSERV.iPLUG5M(?,?,?,?) with transport: ibm_db2
Input XML: <?xml version="1.0" encoding="UTF-8" ?>
<script>
<sh rows='on'>/QOpenSys/usr/bin/system "DSPLIBL"</sh>
</script>
Output XML: <?xml version="1.0" encoding="UTF-8" ?>
<script>
<sh rows='on'>
<row><![CDATA[  5770SS1 V7R4M0  190621                   ライブラリー・リスト                                23/09/22 18:36:32       ﾍﾟｰｼﾞ    1]]></row>
<row><![CDATA[                            ASP]]></row>
<row><![CDATA[    ﾗｲﾌﾞﾗﾘｰ     タイプ   装置      テキスト記述]]></row>
<row><![CDATA[    QSYS        SYS                    システム・ライブラリー]]></row>
<row><![CDATA[    QSYS2       SYS                    CPI用のシステム・ライブラリー]]></row>
<row><![CDATA[    QHLPSYS     SYS]]></row>
<row><![CDATA[    QUSRSYS     SYS                    System Library for Users]]></row>
<row><![CDATA[    QGPL        USR                    GENERAL PURPOSE LIBRARY]]></row>
<row><![CDATA[    QTEMP       USR]]></row>
<row><![CDATA[                           * * * * *  リストの終わり   * * * * *]]></row>
</sh>
</script>
Exec end: 2023-09-22 18:36:32. Seconds to execute: 0.45046091079712.
```

```xml:V7R5.xml
Creating new toolkit conn with database: 'Resource id #1', user or i5 naming flag: '', transport: 'ibm_db2', persistence: ''
Re-using existing db connection with schema separator: .
Exec start: 2023-09-21 21:21:56
Version of toolkit front end: 1.9.3
IPC: ''. Control key: *cdata *here *pase(1208)
Stmt: call QXMLSERV.iPLUG5M(?,?,?,?) with transport: ibm_db2
Input XML: <?xml version="1.0" encoding="UTF-8" ?>
<script>
<sh rows='on'>/QOpenSys/usr/bin/system "DSPLIBL"</sh>
</script>
Output XML: <?xml version="1.0" encoding="UTF-8" ?>
<script>
<sh rows='on'>
<row><![CDATA[  5770SS1 V7R5M0  220415                                                   23/09/21 21:21:56           1]]></row>
<row><![CDATA[                            ASP]]></row>
<row><![CDATA[                  ]]></row>
<row><![CDATA[    QSYS        SYS                    ]]></row>
<row><![CDATA[    QSYS2       SYS                    CPI]]></row>
<row><![CDATA[    QHLPSYS     SYS]]></row>
<row><![CDATA[    QUSRSYS     SYS                    System Library for Users]]></row>
<row><![CDATA[    QGPL        USR                    GENERAL PURPOSE LIBRARY]]></row>
<row><![CDATA[    QTEMP       USR]]></row>
<row><![CDATA[                           * * * * *     * * * * *]]></row>
</sh>
</script>
Exec end: 2023-09-21 21:21:56. Seconds to execute: 0.22425985336304.
```
![2023-12-13_183806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/52395628-3825-84fa-4ab1-8be746413ff4.png)

---

因みに、日本語環境や自社の環境だけに問題があるかを切り分けるため、Tech Zone の V7R5 でも行ったが同様に文字化けした。V7R4 だと日本語環境でも Tech Zone でも正常に動作。
やり取りの3ヶ月で、ジョブログ収集、ダンプ収集、MGTOOL やったりしたが、結局原因分からず。これでハマったときは、最新のPTFを当ててみて下さい。どれが効いたか分かりませんが...。
とにかく解決はしたので、IBM サポートの方、3ヶ月も訳のわからん事象にお付き合い、ありがとうございました。