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

Jumping and Resetting with fseek and rewind تحريك المؤشر وإعادته للبداية بـ fseek و rewind

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

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

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

تعتمد عمليات الوصول العشوائي في الملفات على الدالة fseek() للقفز المباشر إلى أي إزاحة بالبايت، وعلى rewind() لإعادة المؤشر إلى نقطة الصفر.

  • تضع fseek($fp, $offset, SEEK_SET) المؤشر عند $offset بايت من بداية الملف (وهو الوضع الافتراضي).
  • يحرك الثابت SEEK_CUR المؤشر نسبةً إلى موقعه الحالي، بينما يحركه SEEK_END نسبةً إلى نهاية الملف (غالباً بقيم سالبة).
  • تُعد rewind($fp) اختصاراً مباشراً للأمر fseek($fp, 0, SEEK_SET) كما أنها تمسح علامة الوصول لنهاية الملف.

تقفز fseek($fp, 11, SEEK_SET) مباشرة إلى البايت 11 لقراءة "9841"، ثم تعود للبايت 0 لقراءة "2026".

مخطط تدفق التنفيذ العملي لقسم تحريك المؤشر وإعادته للبداية بـ fseek و rewind في لغة PHP
PHP
<?php
$fp = fopen('php://memory', 'r+');
fwrite($fp, "2026-ORDER-9841");
fseek($fp, 11, SEEK_SET);
$orderId = fread($fp, 4);
fseek($fp, 0, SEEK_SET);
$year = fread($fp, 4);
echo "Year: $year | Order: $orderId\n";
fclose($fp);