سلام
راهی برای جلوگیری از ورود همزمان چندین کاربر به یه قسمت از کد php وجود داره؟
سلام
راهی برای جلوگیری از ورود همزمان چندین کاربر به یه قسمت از کد php وجود داره؟
اینم یه نمونه کد پیشنهادی سیستم محدود کردن تعداد لاگین که یک همچین حالتی داره: https://barnamenevis.org/showthread.p...=1#post1307986
پروسس دوم که میره سراغ باز کردن فایل بلاک میشه یا اینکه نمی تونه فایل رو باز کنه و با شکست رو به رو میشه؟فایل php کل اش رو میشه قفل کرد و همچنین قسمت های داخلی را.
تابع flock فکر کنم بهتون کمک کند.
بله پروسس دوم متظر میموند که تا قفل باز بشود (یعنی پروسس قبلی کارش تموم بشه) و یادتون باشه که از set_time_limit حتما استفاده کنید تا برنامه با خطا رو به رو نشود.
این لینکم بخونین بد نیست :
مشاهده
آخرین ویرایش به وسیله abolfazl-z : دوشنبه 28 بهمن 1392 در 19:05 عصر
مطمئنید گزینه خوبیه؟! چون اگر برنامه مثلا تو ناحیه بحرانی قفل شه. اون موقع همیشه اون ناحیه قفل میمونه.set_time_limit
if (!function_exists('sem_get')) {
function sem_get($key) {
return fopen(__FILE__ . '.sem.' . $key, 'w+');
}
function sem_acquire($sem_id) {
return flock($sem_id, LOCK_EX);
}
function sem_release($sem_id) {
return flock($sem_id, LOCK_UN);
}
}
من یع همچین کدی رو پیدا کردم. نمی دونم تا چه اندازه استفاده از این کد میتونه safe باشه
نگاه کنید تابع flock کل فایل php رو قفل میکنه و اجازه خواندن/نوشتن (بستگی به انتخاب دارد) نمیدهد و زمانی که اجرای اسکریپت به پایان برسه قفل باز میشه.
برای درک بهتر مثال زیر را انجام دهید :
یک فایل php ایجاد کنید و کد زیر در آن را وارد کنید :
<?php
$o = fopen('test.php','r');
flock($o,LOCK_SH);
for($i=0;$i<=10;$i++)
sleep(1);
echo 'end('.date('i:s').')';
?>
خوب حالا سه تب در مرورگر باز کنید و به ترتیب وارد فایلی که ساختید شوید.
خواهید دید که هر کدام پس از اتمام دیگری شروع به اجرا می کنند.
درضمن تابع set_time_limit فقط باعث جلوگیری از بروز خطای maximum execution می شود. (اصلا لازم نیست اگر اجرای اسکریپتتون طولانی نمیشه)
فقط یه سوال دیگه اگر اجرای اسکریپت به هر دلیلی خطا بده (توی ناحیه بحرانی) فایل قفل میمونه؟ یا اینکه با بسته شدن توصیفگر، قفل هم آزاد میشه؟