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

Exclusive File Locking with flock تأمين الكتابة المتزامنة بالأقفال الحصرية flock

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

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

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

عندما تحاول عدة طلبات ويب الكتابة في الملف نفسه في آنٍ واحد، تمنع الدالة flock() تداخل البيانات وتلف الأسطر عبر أقفال نظام التشغيل.

  • مرّر الثابت LOCK_SH للحصول على قفل مشترك للقراءة المتزامنة، أو LOCK_EX للحصول على قفل حصري قبل أي كتابة.
  • إذا فتحت ملفاً بالوضع "r+" أو "c" لاستبدال محتواه بأمان تحت القفل، استدعِ ftruncate($fp, 0) فقط بعد نجاح flock($fp, LOCK_EX).
  • استدعِ دائماً fflush($fp) قبل فك القفل عبر flock($fp, LOCK_UN) لضمان تفريغ البايتات المؤقتة للقرص أثناء سريان القفل.

الفتح بالوضع "c+" يتجنب مسح الملف قبل الحصول على القفل؛ وفور نجاح LOCK_EX يتم تصفير الملف والكتابة وتفريغ المجرى ثم فك القفل.

PHP
<?php
$tmp = sys_get_temp_dir() . '/ct_counter.txt';
$fp = fopen($tmp, 'c+');
if (flock($fp, LOCK_EX)) {
    ftruncate($fp, 0);
    fwrite($fp, "VISITS=42");
    fflush($fp);
    flock($fp, LOCK_UN);
}
fclose($fp);
echo file_get_contents($tmp) . "\n";
unlink($tmp);