แยกไฟล์ไบนารีใน PHP

ไฟล์ข้อมูลรหัสไบนารี่ใช้สำหรับโปรแกรมในภาษาการเขียนโปรแกรมระดับต่ำเช่น C ซึ่งไม่สามารถแปลเป็นรูปแบบข้อความได้อย่างสอดคล้องกัน

การใช้ภาษาระดับต่ำในการจัดเก็บค่าที่กำหนดจะต้องใช้รหัสไบนารีเมื่อคุณโหลดในโปรแกรมแก้ไขข้อความเพื่อบันทึกหรืออ่าน

ไม่สามารถอ่านไฟล์ไบนารีได้เนื่องจากอยู่ในรูปแบบไบนารีแบบดิบในภาษาอย่าง Pascal ดังนั้นผู้ดูแลเว็บใช้ PHP เพื่ออ่านและเขียนไฟล์เป็นข้อความ ต้องใช้ฟังก์ชันเฉพาะเพื่อดึงค่าของคุณ

PHP ใช้ฟังก์ชั่นพิเศษที่เรียกว่า unpack () หลังจากมีการประกาศอาร์กิวเมนต์ชนิดข้อมูลแรกคุณจะต้องกู้คืนและสร้างอาร์กิวเมนต์ที่สองเป็นสตริงที่คุณต้องการดึงข้อมูล ข้อมูลที่กู้คืนได้จะต้องอยู่ในข้อโต้แย้งเชิงสัญลักษณ์

เมื่อใช้ภาษาระดับต่ำเช่น C หรือ Pascal เป็นขั้นตอนทั่วไปในการจัดเก็บข้อมูลในไฟล์ไบนารี (ระเบียนที่ไม่สามารถแปลเป็นข้อความ)

ใช้ภาษา C หากคุณต้องการบันทึกค่า 500 ในไฟล์รหัสจะเป็นดังนี้:

 #include int main () {int val = 500; ไฟล์ * fp = fopen ("file", "wb"); fwrite (& val, sizeof (int), 1, fp); // store val ใน "file" fclose (fp); กลับ 0 } 

เมื่อเปิดไฟล์นี้ด้วยโปรแกรมแก้ไขข้อความคุณอาจพบว่าไฟล์ไม่สามารถอ่านได้เนื่องจากค่าของคุณไม่ได้รับการบันทึกเป็นข้อความ แต่อยู่ในรูปแบบไบนารีดิบ

แต่ถ้าคุณใช้ PHP ก็มักจะจำเป็นต้องดึงค่าที่เก็บไว้เป็นไบนารี่เป็นครั้งคราว อย่างไรก็ตาม PHP อ่านและเขียนไฟล์เป็นข้อความ ต้องใช้ฟังก์ชันเฉพาะเพื่อดึงค่าของคุณ

การแก้ไขปัญหา:

ฟังก์ชัน unpack () สามารถใช้แก้ปัญหาประเภทนี้ได้ คุณต้องประกาศประเภทของข้อมูลที่คุณต้องการกู้คืนจากนั้นสตริงที่คุณต้องการดึงข้อมูล

ประเภทของข้อมูลที่จะกู้คืนต้องมีรายละเอียดโดยใช้สัญลักษณ์ที่สอดคล้องกัน ตัวอย่างเช่นในการเรียกข้อมูลจำนวนเต็มแบบลงนามให้ใช้อักขระ i

ดังนั้นหากเราใช้ไฟล์ที่เราบันทึกไว้ในตัวอย่างด้านบนนี่คือรหัสเพื่อดึงค่าของเรา:

    • หมายเหตุสำคัญ:
  • ขนาดข้อมูลอาจเปลี่ยนแปลงได้ขึ้นอยู่กับสถาปัตยกรรมโปรเซสเซอร์ (Sparc, ARM, PowerPC)
    • โปรแกรมที่เขียนใน C ใช้จำนวนเต็มขนาดแตกต่างกันจาก 32- บิตถึง 64 บิต
    • การจัดเรียงข้อมูลอาจไม่เหมือนกัน เครื่องจักรบางเครื่องเก็บข้อมูลใน Big Endian และอื่น ๆ ใน Little Endian
    • ขนาดข้อมูลอาจแตกต่างกันไปขึ้นอยู่กับคอมไพเลอร์
    • ฟังก์ชั่น unpack ส่งคืนอาร์เรย์ที่ซับซ้อนกว่าที่ได้รับเป็นตัวอย่างที่นี่ ในกรณีของเราด้วยค่าที่ร้องขอหนึ่งค่าของเราจะอยู่ใน offset 1 ของอาร์เรย์
  • ชนิดข้อมูลสำหรับพีซีแบบ 32 บิต
    • นี่คือตารางแสดงข้อมูลที่บันทึกโดยโปรแกรม C ที่คอมไพล์แล้วสำหรับพีซีแบบ 32 บิต:
    • ถ่าน : c
    • ถ่านที่ไม่ได้ลงชื่อ : C
    • สั้น : s
    • สั้นไม่ได้ลงนาม : S
    • int : ฉัน
    • int ที่ไม่ได้ลงชื่อ : L
    • ลอย : f
    • สองครั้ง : d

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม