انتقل إلى محتوى الدرس

Reading Pointer Offset with ftell معرفة موقع المؤشر الحالي بالبايت عبر ftell

تحكم في مؤشر القراءة والكتابة بدقة عبر أوضاع fopen ودوال ftell وfseek وrewind، وامنع تضارب الكتابة المتزامنة بقفل الملفات flock.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يحتفظ كل مجرى ملف مفتوح بمؤشر داخلي لموقع البايت، وتُرجع الدالة ftell() رقم ذلك البايت الحالي بدقة بدءاً من الصفر.

  • فور فتح الملف بالوضع "r" أو "w"، تُرجع الدالة ftell($fp) القيمة 0.
  • كل استدعاء للدوال fread() أو fgets() أو fwrite() يُحرّك المؤشر الداخلي بمقدار عدد البايتات التي تمت معالجتها.
  • يتيح حفظ الرقم الصحيح الناتج عن ftell() وضع علامة مرجعية لموقع محدد داخل ملف كبير للعودة إليه لاحقاً.

كتابة 10 أحرف تحرك المؤشر إلى البايت 10؛ وإعادة المؤشر للبداية ثم قراءة 4 بايتات تجعل ftell($fp) عند البايت 4.

PHP
<?php
$fp = fopen('php://memory', 'r+');
fwrite($fp, "ABCDEFGHIJ");
$afterWrite = ftell($fp);
rewind($fp);
fread($fp, 4);
$afterRead = ftell($fp);
echo "Write offset: $afterWrite | Read offset: $afterRead\n";
fclose($fp);