はじめにPHP でテキストを処理する話は色んな所で聞きますが、 バイナリを処理するのはあまり聞かないので、あえてニッチな所を狙って話をします。 一応、自己紹介
バイナリって?通常バイナリとテキストは対比して用いられる。 テキストとはデータの内容すべてを人間が読んで理解できる (human-readable) 表現形式を指し、 バイナリとはそうでない表現形式を指すことが多い。 ~ Wikipedia より なので、本発表では、バイナリファイルの事を、 エディタで開いて読めない文字とか記号が表示されるようなファイル。 という事にしておきます。 バイナリの実例% hexdump -C aria.gif 00000000 47 49 46 38 39 61 c8 00 96 00 f7 00 00 00 00 00 |GIF89a..........| 00000010 ff ff ff 96 53 58 29 1b 1c e6 b0 b8 b2 69 76 37 |....SX)......iv7| 00000020 26 29 d6 96 a1 cb c6 c7 34 1c 22 48 31 38 2b 21 |&)......4."H18+!| <略> GIF ファイルですね。 exdump -C kuriboo4.png 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 c0 00 00 00 e0 08 06 00 00 00 55 70 69 |.............Upi| 00000020 31 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 |1....sBIT....|.d| <略> PNG です。 先頭の4文字を見ると何か分かる事が多いのですが、その後ろにはよく分からないデータが続いてます。 このよく分からないデータを PHP で改変する方法について、今回はお話します。 PHP とバイナリPHP の string 型でバイナリ処理がつつがなく出来る。というのが 今回、紹介する Tips の肝です。 バイナリ処理第一歩$data = file_get_contents($argv[1]); echo strlen($data)."\n"; php strlen.php ~/flash/saitama.jpg 2131 % ls -l saitama.jpg -rw-r--r-- 1 yoya devel 2131 5月 9 00:54 saitama.jpg \0 の扱いC言語出身者から見ると、\0 の扱いが心配になると思います。 確認 確認done |