多くの場合、データはテキスト形式で保存されないため、バイナリ データを読み取って必要な形式に復元する必要があります。 PHP はバイナリ処理の強力なサポートも提供します。
タスク
以下では、PHP を使用してバイナリ ファイルを読み取り、分析する方法を説明するための例として、PNG 画像のファイル ヘッダーを読み取り、分析します。
関連関数
• fopen
• fread
• unpack
• bin2hex
PNG 形式の紹介
タスクを完了するために、ここで PNG ファイル形式について簡単に紹介します。 ... コピー: 89 50 4e 47 0d 0a 1a 0a
私たちのタスクは、このファイルヘッダーを読み取ることです。
PNG 形式の詳細な紹介:
http://www.w3.org/TR/2003/REC-PNG-20031110/
http://www.libpng.org/pub/png/
読むfiles
PHP コード
$filePath = "icon.png" ;
// ファイルの読み取りには rb を使用する必要があり、これによりクロスプラットフォームのバイナリ データの読み取りの安全性が保証されます
$fh = fopen ( $filePath , "rb" );
• A: スペースで埋められたバイト文字列
• h: 16 進数、下位ニブルが最初
• H: 16 進数、上位ニブルが最初
• c: 符号付き文字
• C: 符号なし文字
• s: 符号付き short (常に 16 ビット、マシンバイトオーダー)
• S: unsigned short (常に 16 ビット、マシンバイトオーダー)
• n: unsigned short (常に 16 ビット、ビッグエンディアン)
• v: 符号なし short (常に 16 ビット、リトルエンディアン)
• I: 符号付き整数 (マシンに依存するサイズとエンディアン)
• I: 符号なし整数 (マシンに依存するサイズとエンディアン)
• l: signed Long (常に 32 ビット、マシンバイトオーダー)
• L: Unsigned Long (常に 32 ビット、マシンバイトオーダー)
• N: Unsigned Long (常に 32 ビット、ビッグエンディアン)
• V : unsigned long (常に 32 ビット、リトル エンディアン)
• f: 浮動小数点 (マシンに依存するサイズと表現)
• d: double (マシンに依存するサイズと表現)
• x: null バイト
• 、以下は例です:
• C は 1 文字を読み取り、返される配列インデックスは 1 です
• C4 は 4 バイトを読み取り、各バイトは 1 文字で、返される配列インデックスは 1、2、3、4 です
• C4head は 4 文字を読み取り、バイトごとに 1 文字、返される配列インデックスは head1、head2、head3、head4 です
• Chead は 1 文字を読み取り、返される配列インデックスは head
今すぐ試してください 最初のバイトを読み取ります:
PHP コード
$arr = unpack( "Chead" , $head );
//Array ( [head] => 137 )
8 バイトすべてを読み取るスラッシュで区切ります:
PHP コード
PHP コード
$arr = unpack( "Chead/C3string/C4number" , $head );