flock() (flock)
تابع flock برای «قفل فایل (File Lock)» است. یعنی همزمانی را کنترل می کند. وقتی چند برنامه می نویسند، قفل نظم می دهد. مثل نوبت گرفتن جلوی در کلاس.
تعریف ساده، سینتکس و ورودی ها
تابع flock(file, lock, block) فایل باز را قفل یا آزاد می کند. file باید از fopen آمده باشد. خروجی true یا false است.
<?php
$file = fopen("test.txt", "w+");
if ($file === false) {
die("Open failed\n");
}
if (flock($file, LOCK_EX)) {
fwrite($file, "Add some text to the file.\n");
fflush($file);
flock($file, LOCK_UN);
} else {
echo "Error locking file!\n";
}
fclose($file);
?>
انواع قفل؛ برای چه کاری؟
چهار حالت داریم: LOCK_SH خواندنِ مشترک، LOCK_EX نوشتنِ انحصاری، LOCK_UN آزادسازی، و LOCK_NB بدون انتظار.
گام های عملی
- با fopen فایل را باز کن.
- با
LOCK_EXقفل انحصاری بگیر. - با fwrite بنویس و
fflushکن. - با
LOCK_UNقفل را آزاد کن و ببند.
نکته: پارامتر block اگر 1 باشد، منتظر می ماند تا قفل آزاد شود.
هشدار: از PHP 5.3 بستن فایل قفل را آزاد نمی کند. خودت LOCK_UN بده.
رفتار بازگشتی و سازگاری
روی موفقیت true و در خطا false می آید. از PHP 5.5، پارامتر block روی ویندوز پشتیبانی می شود.
جمع بندی سریع
- flock برای قفل فایل است.
- چهار حالت قفل داریم.
- پس از نوشتن، قفل را آزاد کن.
- خروجی بولی است: true/false.