1

クライアントの python スクリプトから Web サーバーで php スクリプトをトリガーしています。次のようにクライアント スクリプトで解析できるようにするバイナリ データを処理しています。

$file = "gw/gateway.py"
if (file_exists($file)) {
    $gw_file_sz = filesize($file);
    $filesz1 = $gw_file_sz/256;
    $filesz2 = $gw_file_sz%256;
}
    $binarydata = pack("C*", 0x01, $year1, $year2, $day1, $day2, $min1, $min2, $sec, 0x00, 0x3f, 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xcb,
                                                                                             0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x41,
                                                 0x04, 0x00, 0x1c, 0x2c , 0x5c, 0xe4, 0x38,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe3, 0x7b,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xbf,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0xd7,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0x64,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0x7a,
                                                 0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x22,
                                               0x08, $filesz1, $filesz2);

echo $binarydata;

これでこれらのデータは問題なく動作しますが、このストリームの最後にファイル $file を追加して、クライアントが取得するにはどうすればよいでしょうか? Python 側では、fh = StringIO(data)からすべてのデータを読み取り、 MyByte = ord(fh.read(1))のようなバイトを取得します。

[編集] 次のように、最後 (エコーの前) にデータを追加しようとしました。

    $fh = fopen($file);
    for ($i=0;$i<filesize($file); $i++) {
        $binarydata.=pack("C*",fread($fh,1));
    }
    fclose($fh);

しかし、うまくいかないようです。

4

1 に答える 1

1

データストリームを出力しているので、ファイルの内容全体を直接エコーできない理由はわかりません。また、 $filesz1 を、あなたが意図したと思われるものに変更しました。

$file = "gw/gateway.py"
if (file_exists($file)) {
    $gw_file_sz = filesize($file);
    $filesz1 = floor($gw_file_sz/256);
    $filesz2 = $gw_file_sz%256;
}
$binarydata = pack("C*", 0x01, $year1, $year2, $day1, $day2, $min1, $min2, $sec, 
    0x00, 0x3f, 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xcb,
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x41,
    0x04, 0x00, 0x1c, 0x2c , 0x5c, 0xe4, 0x38,
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe3, 0x7b,
    0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xbf,
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0xd7,
    0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0x64,
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0x7a,
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x22,
    0x08, $filesz1, $filesz2);

echo $binarydata;
echo file_get_contents($file);
于 2012-11-20T22:42:17.513 に答える