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

Line-by-Line Streaming with fgets and feof القراءة المتدفقة سطراً بسطر عبر fgets و feof

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

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

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

عند معالجة ملفات السجلات الضخمة، تتيح القراءة المتدفقة سطراً بسطر عبر fgets() الحفاظ على استهلاك الذاكرة ثابتاً ومنخفضاً.

  • تقرأ الدالة fgets($fp) البايتات من موقع المؤشر الحالي حتى محرف السطر الجديد \n التالي أو نهاية الملف.
  • فحص الشرط ($line = fgets($fp)) !== false داخل حلقة while هو الأسلوب الأدق للمرور على جميع الأسطر حتى النهاية.
  • تتحقق الدالة feof($fp) مما إذا كان مؤشر الملف قد وصل إلى علامة نهاية الملف (EOF) بعد انتهاء القراءة.

تقرأ حلقة while ثلاثة أسطر بالتتابع عبر fgets()، وتؤكد feof($fp) وصول المؤشر إلى نهاية المجرى.

PHP
<?php
$fp = fopen('php://memory', 'r+');
fwrite($fp, "INFO: Boot\nWARN: Disk\nINFO: Ready\n");
rewind($fp);
$count = 0;
while (($line = fgets($fp)) !== false) {
    $count++;
}
echo "Lines: $count | EOF: " . (feof($fp) ? 'yes' : 'no') . "\n";
fclose($fp);