Client.php → Server.php へデータをPOSTでデータを送信したいです。
送信するデータは AAA=1とBBB=2とファイルから読み込んだバイナリデータです。
その際、Wiresharkで送信データを見る時、「bina.bin(中身のバイナリはFB EE FB EFとします)と同じバイナリデータが表示されていてほしいです。formは使えません。

ver1のClient.phpのプログラムを示します。

// 送信データファイル読み込み
$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin");
//POSTデータ
$data = array(
    "AAA" => "1",
    "BBB" => "2",
    "BinData" => $SendContents
    );
$data = http_build_query($data, "", "&");
$header = array(
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: ".strlen($data)
);
$context = array(
    "http" => array(
        "method"  => "POST",
        "header"  => implode("\r\n", $header),
        "content" => $data
    )
);
// アクセスする先
$url = "http://xxxxxxxxx/Server.php";
file_get_contents($url, false, stream_context_create($context));

上記のコードでは%エンコードされているようでして、Wiresharkに「FB EE FB EF」のデータが出ませんでした。

ver2のClient.phpのプログラムを示します。
$SendContents = file_get_contents("C:/xampp/htdocs/bina.bin");
//POSTデータ
$data = array(
    "AAA" => "1",
    "BBB" => "2",
    "BinData" => "$SendContents"
    );
$header = "Content-Type: application/octet-stream";
$opts = array(
    'http' => array(
        'method' => 'POST',
        'header' => $header,
        'content' => $data,//←直接"$SendContents"を入れると上手くいく
        )
    );
// アクセスする先
$url = "http://xxxxxxxxx/Server.php";
file_get_contents($url, false, stream_context_create($opts));

ver2のコードですと、上手く送信ができません。
'content' => $SendContents にするとWiresharkにはバイナリデータ「FB EE FB EF」が表示されますが、POSTで AAA=1 と BBB=2も送信したいと思っております。
ここからどうすれば良いかご教授願いたいです。
宜しくお願い致します。

xampp
Apache
php
Wireshark

追記
サーバーのプログラムを示します。
echo $_POST["AAA"];
echo $_POST["BBB"];
echo $_POST["$data"];
です