PHPでは、バイナリデータを処理する場合、 pack()関数とfile_put_contents()関数の組み合わせが非常に実用的です。 pack()は、データを指定された形式でバイナリ文字列に変換でき、 file_put_contents()はこれらのバイナリデータをファイルに書き込む責任があります。この記事では、これら2つの関数を使用して構造化されたデータをバイナリファイルに書き込む方法について詳しく説明します。
Pack()関数は、フォーマットコードに従って変数をバイナリ文字列に変換します。次のようなさまざまなフォーマットコードをサポートしています。
C :署名された文字(1バイト)
C :署名されていない文字(1バイト)
S :署名された短い整数(2バイト)
S :署名されていない短い整数(2バイト)
I :署名された整数(4バイト)
I :署名されていない整数(4バイト)
F :浮動小数点数(4バイト)
D :ダブル精度の浮動小数点数(8バイト)
その他の形式については、公式のPHPドキュメントを参照してください。
file_put_contents()関数は、ファイルに文字列を書き込むために使用されます。ファイルコンテンツはデフォルトで上書きされるか、モードを追加するように設定できます。
ID(4バイト整数)、ステータス(1バイト文字)、フローティングポイント値(4バイトフローティングポイント数)を含むデータ構造を作成するとします。
<?php
// データの準備
$id = 123456; // 整数
$status = 1; // 州,1バイト符号なし整数
$value = 3.14159; // フローティングポイント番号
// 使用 pack() フォーマットごとにデータをパックします
// 形式の説明:I - 署名されていない整数,C - 署名されていない文字,f - フローティングポイント番号
$binaryData = pack('ICf', $id, $status, $value);
// バイナリファイルに書き込みます
file_put_contents('data.bin', $binaryData);
echo "数据已バイナリファイルに書き込みます。\n";
?>
上記のコードを実行した後、 data.binという名前のファイルが現在のディレクトリで生成され、ファイルコンテンツは対応するバイナリデータです。
書き込みが成功しているかどうかを確認するには、 file_get_contents()を使用してファイルコンテンツを読み取り、 uppack()で解析できます。
<?php
// バイナリファイルを読み取ります
$data = file_get_contents('data.bin');
// データの開梱
// フォーマットは、ライティング時間と一致する必要があります
$result = unpack('Iid/Cstatus/fvalue', $data);
print_r($result);
?>
出力の結果は次のとおりです。
Array
(
[id] => 123456
[status] => 1
[value] => 3.14159
)
バイトオーダー: pack()は、デフォルトでマシンバイトの順序を使用します。プラットフォームまたはネットワークを越えて送信される場合は、バイト順序形式( Nなどが署名されていないネットワークバイト整数整数など)を指定することをお勧めします。
フォーマットマッチング: pack()とunpack()の形式は1つずつ対応する必要があります。そうしないと、エラーが解析されます。
ファイル許可:ファイルを書き込むときに、PHPにターゲットフォルダーを操作するのに十分な権限があることを確認してください。