IBMi OS V7R5 にバージョンアップして以来、PHP iToolkit のコマンドが(例えば DSPLIBL )文字化けする。
原因を調査しても、一向に分からず、IBMサポートの方と3ヶ月ほどやりとりしたが、全然解決しない。
解決
結論から言うと、原因は分からないが、TR3が利用したくて最新のPTFを当てたら文字化けしなくなった。
IBMさん側では、「解決となる様な修正はないとのこと」。釈然としないが、同じことに遭遇してしまう、運の悪い方もいるかも知れないので、現象だけ記録に残しておく。
PHP iToolkit って
-zendtech/IbmiToolkit
そもそも、「PHP iToolkit」 って何?って事ですが、PHPでXMLの入出力を介して、プログラム連携やコマンド連携を簡単に出来る便利なライブラリ。もちろんの CS^2 にもバンドルされており、新しいバージョン CS^2 がリリースされると Toolkit の動作もテストしている。そして今回は V7R5 のテストで引っ掛かた訳だ。私も敬愛する Alan もコントリビューターだ。
IBMi 側の XML 仲介役は QXMLSERV が IBMi 導入時に提供されている。 Zend Server 時代は、Zend系ライブラリに内包されていた。
てっきり、うまく行かないのは、この QXMLSERV が原因だと思っていたが、 V7R5 では特に改修が入っていないらしい。
NGだった現象
以下の例の様なソースで V7R4 では正常に動作し、V7R5 では文字化けが発生した。
$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 ログ出力結果を比較すると次の様に異なっていた。
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.
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.
因みに、日本語環境や自社の環境だけに問題があるかを切り分けるため、Tech Zone の V7R5 でも行ったが同様に文字化けした。V7R4 だと日本語環境でも Tech Zone でも正常に動作。
やり取りの3ヶ月で、ジョブログ収集、ダンプ収集、MGTOOL やったりしたが、結局原因分からず。これでハマったときは、最新のPTFを当ててみて下さい。どれが効いたか分かりませんが...。
とにかく解決はしたので、IBM サポートの方、3ヶ月も訳のわからん事象にお付き合い、ありがとうございました。