كيف يمكنني استخدام PHP File API لكتابة البايتات الأولية؟

StackOverflow https://stackoverflow.com/questions/77558

  •  09-06-2019
  •  | 
  •  

سؤال

أريد أن أكتب دفق بايت/بايت خام إلى موضع في ملف.وهذا ما لدي حاليا:

$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63); 
fclose($fpr);

يقوم هذا حاليًا بكتابة قيمة السلسلة الفعلية "99" بدءًا من إزاحة البايت 1.أي أنه يكتب البايتات "9" و"9".أريد فقط أن أكتب القيمة الفعلية للبايت الواحد 0x63 والتي تمثل الرقم 99.

شكرا على وقتك.

هل كانت مفيدة؟

المحلول

fwrite() يأخذ سلاسل.يحاول chr(0x63) إذا كنت تريد أن تكتب أ 0x63 بايت إلى الملف.

نصائح أخرى

وذلك لأن fwrite() تتوقع سلسلة كوسيطة ثانية لها.حاول القيام بذلك بدلاً من ذلك:

fwrite($fpr, chr(0x63));

يُرجع chr(0x63) سلسلة ذات حرف واحد بقيمة ASCII 0x63.(لذا سيكتب الرقم 0x63 في الملف.)

أنت تحاول تمرير int إلى دالة تقبل سلسلة، لذلك يتم تحويلها إلى سلسلة لك.

وهذا سوف يكتب ما تريد:

fwrite($fpr, "\x63");

إذا كنت تريد حقًا كتابة ملفات ثنائية إلى ملفات، فإنني أنصحك باستخدام ملف pack() النهج جنبا إلى جنب مع ملف API.

انظر هذا السؤال على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top