လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Custom ဖွဲ့စည်းပုံထုပ်ပိုးခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းဥပမာများ - pack () + unpack ()

Custom ဖွဲ့စည်းပုံထုပ်ပိုးခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းဥပမာများ - pack () + unpack ()

M66 2025-05-31

PHP တွင် POST () function သည်အချက်အလက်များကိုသတ်မှတ်ထားသောပုံစံဖြင့် binary strings များထဲသို့ထုပ်ပိုးရန်အလွန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကို binary protocols များနှင့်ကွန်ယက်ထုတ်လွှင့်ခြင်း, ဖိုင်ရေးသားခြင်းသို့မဟုတ်အပြန်အလှန်အကျိုးစီးပွားအတွက်အသုံးပြုသည်။ သက်ဆိုင်ရာ အ 0 တ်အထည် () function သည်ထုပ်ပိုး binary string ကိုစနစ်တကျအချက်အလက်များကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာနိုင်သည်။ ဤဆောင်းပါးသည် တိမ်အနက်ကိုမည်သို့အသုံးပြုရမည်ဟုအတိမ်အနက်ကိုမိတ်ဆက်ပေးနိုင်သည်


Pack () function ကိုမိတ်ဆက်

အထုပ် () fatch string ကို အခြေခံ. binary strings တစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသော function () function () function ကို package များ။ ဘုံပုံစံများတွင်:

  • A : ဖြည့်စွက်ထားသော string (string fixed အရှည်)

  • A : Space ပြည့်ဝသော string (string fixed အရှည်)

  • C : IFFIFTED ဇာတ်ကောင် (1 byte)

  • C : လက်မှတ်ရေးထိုးထားသောဇာတ်ကောင်များ (1 byte)

  • S : INFIFICED မတိုသောကိန်း (2 bytes)

  • S : တိုတောင်းသောကိန်း (2 bytes) ကိုလက်မှတ်ရေးထိုးခဲ့သည်။

  • : လက်မှတ်မထိုးနိုင်သည့်ရှည်လျားသော (4 bytes)

  • L : ဆိုင်းအင်လုပ်ထားတဲ့ရှည်လျားသောကိန်း (4 bytes)

  • N : လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်း (4 bytes, network endianness)

  • n : လက်မှတ်မထိုးထားသောကိန်းတို (2 Bytes, Network Enterianness)


Custom ဖွဲ့စည်းပုံဥပမာ

ကျွန်ုပ်တို့တွင်အောက်ပါအတိုင်းရိုးရိုးရှင်းရှင်းတည်ဆောက်ပုံလမ်းညွှန်ရှိသည်ဆိုပါစို့။

  • User ID (IDIGNED Long Integer, 4 Bytes)

  • အခြေအနေ (IFINGED ဇာတ်ကောင် 1 byte)

  • လက်ကျန်ငွေ (လက်မှတ်ထိုးထားသော Integer, 2 bytes)

  • နာမည် (Fixed အရှည် 10 byte string)

ဤအချက်အလက်များကို Pack () နှင့်မည်သို့ထုပ်ပိုးပြီး ဖြည် ချထားခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာနည်း။


Code Page

 <?php
// ဒေတာကိုသတ်မှတ်ပါ
$userId = 123456789;
$status = 1;
$balance = -250;
$name = "Zhang San";

// အသုံးပြုpack()ထုပ်ပိုးဒေတာ
// ပုံစံဖော်ပြချက်:
// N - အသုံးပြုသူID,network endianness ၏လက်မှတ်မထားသောရှည်လျားသောကိန်းဂဏန်းများ(4ဒရယ်)
// C - အသေအချာပေြာဆို,လက်မှတ်မထိုးဇာတ်ကောင်(1ဒရယ်)
// s - လက်ကျန်ငေှ,တိုတောင်းတဲ့ integer လက်မှတ်ရေးထိုးခဲ့သည်(2ဒရယ်)
// a10 - နံမယ်,fixed အရှည်10ဒရယ်,NULဖြည့်ခြင်း
$packedData = pack('NCsa10', $userId, $status, $balance, $name);

// ထုပ်ပိုး binary data များ၏ hexadecimal ကိုယ်စားပြုမှုကိုပုံနှိပ်ပါ,လေ့လာရန်လွယ်ကူသည်
echo "ထုပ်ပိုးဒေတာ(hexadecimal): " . bin2hex($packedData) . PHP_EOL;

// ကွန်ယက်ပေါ်တွင်ဒေတာထုတ်လွှင့်မှုကိုတုပပါ,လက်ခံရရှိပြီးနောက် unpack
$unpackedData = unpack('NuserId/Cstatus/sbalance/a10name', $packedData);

// unpacked array ပုံနှိပ်ပါ
print_r($unpackedData);
?>

ထုတ်လုပ်မှုဥပမာ

 ထုပ်ပိုးဒေတာ(hexadecimal): 075bcd1501ff06e58f5a696e67
Array
(
    [userId] => 123456789
    [status] => 1
    [balance] => -250
    [name] => Zhang San
)

အသေးစိတ်ဖော်ပြချက်

  • n forator သည်လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်းဂဏန်းများ (4 bytes) ကိုကိုယ်စားပြုပြီးကွန်ယက် byte အမိန့် (Big Endian) ကိုအသုံးပြုသည်။

  • C သည် status fields များအတွက်လက်မှတ်မထားသောဇာတ်ကောင် 1 byte ကိုဆိုလိုသည်။

  • S သည် လက်ကျန်ငွေသည်အပျက်သဘောဆောင်သောကြောင့်လက်မှတ်ရေးထိုးထားသောကိန်း (2 bytes) ကိုလက်မှတ်ရေးထိုးထားပြီးလက်မှတ်ရေးထိုးထားသောတန်ဖိုးများကိုထောက်ခံသည်။

  • A10 သည် သတ်မှတ်ထားသောအရှည် string ကိုကိုယ်စားပြုသည်။ string ကိုမလုံလောက်ပါက, \ t နှင့်ပြည့်စုံလိမ့်မည်။

အဆိုပါ unpack () function သည်အချက်အလက်များကိုတူညီသောပုံစံဖြင့်လှဲချသည်။ တစ်ခုချင်းစီကိုလယ်ကွင်းတစ်ခုချင်းစီကို 0 င်ရောက်ခွင့်ကိုလွယ်ကူချောမွေ့စေရန်အဓိကအမည်များကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။


သိကောင်းစရာများနှင့်ကြိုတင်ကာကွယ်မှုများ

  1. byte အမိန့်ပြ issue နာ အကယ်. မတူညီသောစက်ဗိသုကာများအကြားအချက်အလက်များကိုကူးယူရန်လိုအပ်ပါကသေးငယ်ပြီးသေးငယ်သည့်အကြားအကြားလိုက်ဖက်နိုင်အောင် Connectian ( N , n ) format ကိုအသုံးပြုရန်အကြံပြုသည်။

  2. string padding <br> <br> ပုံစံ ကိုအသုံးပြုပြီး string မလုံလောက်သည့်အပိုင်းကို \ t နှင့်ဖြည့်ဆည်းပေးနိုင်သည် အမှားများကိုရှောင်ရှားရန်သင့်လျော်သောဖြည့်ထားသောနည်းလမ်းကိုရွေးချယ်ပါ။

  3. Fixed ဒေတာအရှည် <br> <br> ထုပ်ပိုးခြင်းပုံစံသည်ဖြန့်ကျက်ထားသောပုံစံနှင့်တင်းကြပ်စွာကိုက်ညီရမည်, အထူးသဖြင့် string length သည်အတူတူပင်ဖြစ်ရမည်။

  4. Skills <br> <br> binary data ကို hexadecimal သို့ hexadecimal သို့ပြောင်းရန် Bin2HEX () ကို သုံးနိုင်သည်။


URL မြင်ကွင်းဥပမာနှင့်အတူပေါင်းစပ်

URL field ပါ 0 င်သော data packet တစ်ခုကိုသင်တပ်ဆင်ရန်လိုအပ်ပါက domain name အပိုင်းကို M66.net ဖြင့်အစားထိုးရန်လိုအပ်သည်။