PHP တွင် Binary Data, Pack () နှင့် Unpack () လုပ်ဆောင်ချက်များသည်အလွန်လက်တွေ့ကျသောကိရိယာများဖြစ်သည်။ ၎င်းတို့သည်ဒေတာများကိုတိကျသောပုံစံဖြင့် Binary ကြိုးများအဖြစ်ပြောင်းလဲနိုင်သည်။ ၎င်းသည်ထုံးစံအတိုင်းဒေတာအဆောက်အအုံများကို serialization နှင့် deserialization များကိုအကောင်အထည်ဖော်ရန်အတွက်အလွန်အရေးကြီးသည်,
ဤဆောင်းပါးသည် Custom Data ဖွဲ့စည်းပုံများကိုအကောင်အထည်ဖော်ခြင်းနှင့်ပြောင်းလဲခြင်းကိုအကောင်အထည်ဖော်ရန် Pack () နှင့် ဖြည်ချခြင်း () functack () functack () functack များကိုမည်သို့ပေါင်းစပ်ရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
Pack (arms ... arms ... ) : parameter သည် parameter သည် format string နှင့်အညီ Binary String သို့ arges များ ပါ 0 င်သည်။
Unpack (format, format data) - format string ကိုအညီ Associative Array သို့ binary string data ကို ဖြည်ပါ။
format string ကို data အမျိုးအစား, အရှည်နှင့် endianness ကိုသတ်မှတ်ပေးသော format code ဖြင့်ဖွဲ့စည်းထားသည်။ ဥပမာအားဖြင့်:
C : IFFIFTED ဇာတ်ကောင် (1 byte)
n : လက်မှတ်မထိုးထားသော 16-bit big-endian endian Endian Integer
v : လက်မှတ်မထိုးထားသော 32-bit-bit-endian endian integer
A : Nul ဖြည့် string ကို
A : အာကာသဖြည့် string ကို
အချိန်ပိုများများအတွက်သာလျှင် တရားဝင် PHP စာရွက်စာတမ်းကို ဖတ်ရှုပါ။
ကျွန်ုပ်တို့သည်ရိုးရှင်းသောဒေတာဖွဲ့စည်းပုံကိုအောက်ပါအတိုင်းသတ်မှတ်သည်ဆိုပါစို့။
Field Name | ပုံနှိပ်စာ | အရှည် (bytes) | ဥပမာပြပါ |
---|---|---|---|
ပုံနှိပ်စာ | one8 | 1 | ဒေတာအမျိုးအစားဖော်ထုတ်ခြင်း |
အရှည် | irint16 | 2 | နောက်ဆက်တွဲဒေတာအရှည် |
မေြာင်း | byte စီး | အရှည် | တိကျသောဒေတာအကြောင်းအရာ |
ကျွန်ုပ်တို့၏ရည်မှန်းချက်ပန်းတိုင်များမှာ -
PHP အချက်အလက်ဖွဲ့စည်းပုံကိုအထက်ဖော်ပုံစံနှင့်ကိုက်ညီသော binary data ထဲသို့ထည့်ပါ။
Binary Data ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်အမျိုးအစား, အရှည်နှင့် payload fields များကိုထုတ်ယူသည်။
<?php
function packData(int $type, string $payload): string {
$length = strlen($payload);
// 'C' - 1byte offigned integer
// 'n' - 2byte offigned Big Endian ကိန်းဂဏန်း
// 'a*' - မည်သည့်အရှည် string ကို,NULဖြည့်ခြင်း(这里不需要ဖြည့်ခြင်း)
return pack('Cn', $type, $length) . $payload;
}
// စမ်းသပ်မှု
$type = 5;
$payload = "Hello, World!";
$binaryData = packData($type, $payload);
echo bin2hex($binaryData);
?>
ဤတွင် Pack ('CN', $ အမျိုးအစား, $ အရှည်) သည် အမျိုးအစား နှင့် အရှည်ကို သီးခြားစီထုပ်ပိုးပြီးမူရင်း string ကို $ payload ကို splice လုပ်ပါ။
ခွဲခြမ်းစိတ်ဖြာစဉ်အတွင်းပထမ ဦး စွာသတ်မှတ်ထားသောအရှည်အပိုင်း၏ အမျိုးအစား နှင့် အရှည်ကို ထုတ်ယူပါ။ ထို့နောက်ကျန်ရှိသော payload ကို အရှည် အတိုင်းကြားဖြတ်။
<?php
function unpackData(string $binaryData): array {
// ပထမ ဦး ဆုံးဖြန့်ချိမီ3နေပြည်တော်,type(1ဒရယ်) + length(2ဒရယ်大端)
$header = unpack('Ctype/nlength', substr($binaryData, 0, 3));
$type = $header['type'];
$length = $header['length'];
// ကျန်ရှိသောယူပါpayloadအချက်များ
$payload = substr($binaryData, 3, $length);
return [
'type' => $type,
'length' => $length,
'payload' => $payload,
];
}
// စမ်းသပ်မှု
$data = $binaryData; // အထက်မှယူဆpackDataထုတ်လုပ်ခြင်း
$result = unpackData($data);
var_dump($result);
?>
အထက်ဖော်ပြပါလုပ်ဆောင်ချက်နှစ်ခုကို 0 င်ရောက်ခြင်းနှင့်စိတ်ကြိုက်အဆောက်အအုံများကို deserialization ကိုအကောင်အထည်ဖော်ရန်လုပ်ဆောင်ရန်လုပ်ဆောင်ပါ။
<?php
function packData(int $type, string $payload): string {
$length = strlen($payload);
return pack('Cn', $type, $length) . $payload;
}
function unpackData(string $binaryData): array {
$header = unpack('Ctype/nlength', substr($binaryData, 0, 3));
$type = $header['type'];
$length = $header['length'];
$payload = substr($binaryData, 3, $length);
return [
'type' => $type,
'length' => $length,
'payload' => $payload,
];
}
// အသုံးပြုမှုဥပမာ
$type = 10;
$payload = "PHP pack/unpack သရုပ်ပြ";
$packed = packData($type, $payload);
echo "二进制အချက်များ(hex):" . bin2hex($packed) . "\n";
$unpacked = unpackData($packed);
echo "ခွဲခြမ်းစိတ်ဖြာရလဒ်များ:\n";
print_r($unpacked);
?>
ရလဒ်များအစက်အပြောက်:
二进制အချက်များ(hex):0a0017... (hexbinary အကြောင်းအရာ encoded)
ခွဲခြမ်းစိတ်ဖြာရလဒ်များ:
Array
(
[type] => 10
[length] => 23
[payload] => PHP pack/unpack သရုပ်ပြ
)
Pack () နှင့် Unpack () သည် Binary Data မျိုးစုံကိုလုပ်ဆောင်ရန်အတွက်အစွမ်းထက်သောကိရိယာများဖြစ်ပြီးအချက်အလက်အမျိုးအစားများနှင့် endian ပြောင်းလဲခြင်းကိုထောက်ပံ့ခြင်း,
ထုံးစံအတိုင်းဒေတာအဆောက်အအုံများကိုခွဲခြမ်းစိတ်ဖြာရန်သင်သည် fixed header format ကိုအရင်သတ်မှတ်ပြီး variable အရှည်အကွက်များကိုလုပ်ဆောင်ရန် string operations များကိုသုံးနိုင်သည်။
Binary processing နှင့်ပေါင်းစပ်ထားသော PHP သည် Network Protocols, File format parsing နှင့်အခြားအခြေအနေများကိုလည်းအလွယ်တကူကိုင်တွယ်နိုင်သည်။