سؤال

ما أحتاجه هو ما يعادله PHP fseek() وظيفة. تعمل الوظيفة على الملفات، لكن لدي متغير يحتوي على بيانات ثنائية وأريد العمل عليه. وأنا أعلم أنني يمكن أن تستخدم substr(), ، ولكن هذا سيكون عرجاء - يستخدم في سلاسل، وليس للبيانات الثنائية. أيضا، إنشاء ملف ثم استخدام fseek() ليس ما أبحث عنه أيضا.

ربما شيء مبني مع التدفقات؟

تحرير: حسنا، أنا تقريبا هناك:

$data = fopen('data://application/binary;binary,'.$bin,'rb');

تحذير: فشل في فتح الدفق: RFC2397: المعلمة غير القانونية

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

المحلول

كاي:

لقد أجبت نفسك تقريبا هنا. الجداول هي الجواب. سيتم إدخال الإدخال اليدوي التالي: http://us.php.net/manual/en/wrappers.data.php.

يسمح لك بشكل أساسي بتمرير البيانات التعسفية إلى وظائف معالجة ملف PHP مثل FOPEN (وبالتالي FSEEK).

ثم يمكنك أن تفعل شيئا مثل:

<?php

$data = fopen('data://mime/type;encoding,' . $binaryData);

fseek($data, 128);
?>

نصائح أخرى

FSEEK على البيانات في متغير لا معنى له. FSEEK فقط ضع مقبض الملفات إلى الإزاحة المحددة، بحيث تبدأ مكالمة FREAD التالية في القراءة من تلك الإزاحة. لا يوجد أي ما يعادله من الأوتار.

ما الخطأ في substr ()؟

مع ملف سوف تفعله:

$f = fopen(...)
fseek($f, offset)
$x = fread($f, len)

مع substr:

$x = substr($var, offset, len)

أنا أظن، ولكن ربما ما يطلب منه هو وسيلة للوصول إلى البايتات في متغير باستخدام مؤشر .. (استخدامه مثل مجموعة من البايتات كما يمكنك القيام به في C - بدون علامة ذاكرة لوضع البيانات في صفيف PHP) وتمكن من تحريرها في مكانها دون النفقات العامة لنسخ البيانات.

عدم القدرة على القيام بذلك مشكلة كبيرة، ولكن إذا كان نظام التشغيل تخزين بيانات القرص يستخدم بشكل جيد باستخدام FSEEK في ملف مؤقت يمكن أن يكون الحل البديل.

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