現在の位置: ホーム> 最新記事一覧> file_put_contents()を使用してpack()を使用してバイナリファイルにデータを書き込む方法は?

file_put_contents()を使用してpack()を使用してバイナリファイルにデータを書き込む方法は?

M66 2025-06-03

PHPでは、バイナリデータを処理する場合、 pack()関数とfile_put_contents()関数の組み合わせが非常に実用的です。 pack()は、データを指定された形式でバイナリ文字列に変換でき、 file_put_contents()はこれらのバイナリデータをファイルに書き込む責任があります。この記事では、これら2つの関数を使用して構造化されたデータをバイナリファイルに書き込む方法について詳しく説明します。

1。Pack()関数の紹介

Pack()関数は、フォーマットコードに従って変数をバイナリ文字列に変換します。次のようなさまざまなフォーマットコードをサポートしています。

  • C :署名された文字(1バイト)

  • C :署名されていない文字(1バイト)

  • S :署名された短い整数(2バイト)

  • S :署名されていない短い整数(2バイト)

  • I :署名された整数(4バイト)

  • I :署名されていない整数(4バイト)

  • F :浮動小数点数(4バイト)

  • D :ダブル精度の浮動小数点数(8バイト)

その他の形式については、公式のPHPドキュメントを参照してください。

2。file_put_contents()関数の紹介

file_put_contents()関数は、ファイルに文字列を書き込むために使用されます。ファイルコンテンツはデフォルトで上書きされるか、モードを追加するように設定できます。

3。サンプルコード:構造化されたデータをバイナリファイルに書き込みます

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という名前のファイルが現在のディレクトリで生成され、ファイルコンテンツは対応するバイナリデータです。

4。バイナリファイルの読み取り例

書き込みが成功しているかどうかを確認するには、 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
)

5。注意すべきこと

  1. バイトオーダーpack()は、デフォルトでマシンバイトの順序を使用します。プラットフォームまたはネットワークを越えて送信される場合は、バイト順序形式( Nなどが署名されていないネットワークバイト整数整数など)を指定することをお勧めします。

  2. フォーマットマッチングpack()unpack()の形式は1つずつ対応する必要があります。そうしないと、エラーが解析されます。

  3. ファイル許可:ファイルを書き込むときに、PHPにターゲットフォルダーを操作するのに十分な権限があることを確認してください。