مثال
قفل کردن و دوباره باز کردن یک فایل:
<?php
$file = fopen("test.txt","w+");
// exclusive lock
if (flock($file,LOCK_EX)) {
fwrite($file,"Add some text to the file.");
fflush($file);
// release lock
flock($file,LOCK_UN);
} else {
echo "Error locking file!";
}
fclose($file);
?>
توضیحات
تابع flock() یک فایل را قفل و یا قفل یک فایل را باز می کند.
سینتکس
flock(file, lock, block)
مقادیر پارامتر ها
پارامتر | توضیح |
---|---|
file | اجباری. آدرس فایل |
lock | اجباری. نوع قفل مقادیر احتمالی
|
block | اختیاری. اگر 1 باشد فرایند های دیگر را بلاک می کند |
سلام
من یه کران جاب دارم که هر سک دقیقه اجرا می شه
می خوام توی هر بار اجرا ببینم دور قبلی تموم شده یا نه
چطور می تونم این کار رو بکنم و از کدوم نوع lock باید استفاده کنم؟
سلام. طبق این لینک پاسختون رو میدم، چندین راه حل ارائه شده:
https://stackoverflow.com/questions/32456985/check-if-a-php-file-command-is-already-running-on-cron
پاسخ 1 - در شروع اجرای کرون یک فایل lock بسازید. هر بار که اسکریپت اجرا می شود، بررسی کنید که آیا فایل وجود دارد یا نه. اگر وجود داشت از اسکریپت خارج شوید، و اگر نه اسکریپت می تواند اجرا شود. البته روش بهتر استفاده از flock در دستور cron است. لینک پاسخ
پاسخ 2- چند روش برای اینکار وجود دارد. 1-می توانید در پایان اجرای اسکریپت، مقداری را در دیتابیس ست کنید و در شروع اجرای اسکریپت آن مقدار را در دیتابیس چک کنید که وجود دارد یا نه. 2- می توانید در شروع اجرا فایلی ایجاد کرده و آن را قفل کنید. و در هر اجرا چک کنید که آیا می توانید فایل را قفل کنید یا نه. لینک پاسخ
3- می تونید از دستور flock در خود دستور cron استفاده کنید: