次のような文字列を出力する PHP 応答スクリプトがあります。
BEGIN;
00000087;
data1A;data1B;data1C;
data2A;data2B;data2C;
data3A;data3B;data3C;
END;
2 行目でわかるように、応答の長さは応答自体の中で送信されます。(応答の長さは、後で検証目的で使用されます。)
現時点では、計算を簡単にするために、合計 8 文字の長さになるように応答の長さを先行ゼロで埋めています。したがって、コードは次のようになります。
$sBegin = "BEGIN;\n";
$sData = "data1A;data1B;data1C;\ndata2A;data2B;data2C;\ndata3A;data3B;data3C;\n";
$sEnd = "END;";
$iPadLength = 8;
$iResponseLength = strlen($sBegin) + strlen($sData) + strlen($sEnd) + $iPadLength + strlen(";\n");
$sResponse = $sBegin . str_pad($iResponseLength, $iPadLength, "0", STR_PAD_LEFT) . ";\n" . $sData . $sEnd;
echo $sResponse;
このソリューションは私には非常に汚いように見えます。ほとんどの場合、応答データが大きくなり、パディングの長さが小さすぎて計算エラーが発生する可能性があるため、パディング部分は好きではありません。
応答の基本構造を変更せずに、これを行うためのより良い解決策があるかどうかを知りたいです。