PDA

View Full Version : سوال: آیا با استفاده از get_content_file امکان دسترسی و ویرایش همزمان چند نفر به یک فایل وجود داره؟



idocsidocs
چهارشنبه 02 شهریور 1390, 16:00 عصر
آیا با استفاده از get_content_file امکان دسترسی و ویرایش همزمان چند نفر به یک فایل وجود داره؟

ایا استفاده از get_content_file نسبت به توابع fread, foper, fclose سرعت بیشتری داره؟

لطفا توضیح بدید.

binyaft
چهارشنبه 02 شهریور 1390, 18:48 عصر
البته فکر میکنم file_get_contents باشه !
سرعتش رو مقایسه نکردم من ، اما دسترسی رو چند تا کاربر میتونن داشته باشن ، اونم همزمان ...
ولی برای ویرایش باید فایل رو قفل کنید تا یک کاربر کارش تموم شه ، بعد کاربر دومی ...

idocsidocs
چهارشنبه 02 شهریور 1390, 19:03 عصر
البته فکر میکنم file_get_contents باشه !
سرعتش رو مقایسه نکردم من ، اما دسترسی رو چند تا کاربر میتونن داشته باشن ، اونم همزمان ...
ولی برای ویرایش باید فایل رو قفل کنید تا یک کاربر کارش تموم شه ، بعد کاربر دومی ...
خب فرض کنید که فقط یه کاربر حق ویرایش فایل داره.

در این صورت این امکان وجود داره که یه کاربر فایل رو ویرایش کنه و همزمان چندین کاربر دیگه هنگام ویرایش شدن فایل، محتویات قبلی فایل رو ببینن؟

binyaft
چهارشنبه 02 شهریور 1390, 19:18 عصر
خب میشه دسترسی چند نفره به صورت همزمان!
خدا نفر میتونن یک فایل رو باز کنن و ببینن اما فقط یکی میتونه فایل رو ویرایش کنه! البته این به این معنی نیست که PHP فایل رو قفل بزنه !
درصورت این که 1+ نفر یک فایل رو همزمان ویرایش کنند ( محتوای جدید رو به سمت فایل بفرستند ) محتوا به هم میریزه ، به همین خاطر باید فایل رو قفل کنید ...

eshpilen
چهارشنبه 02 شهریور 1390, 19:21 عصر
برای خواندن که نیازی به قفل نیست. یعنی اگر 10 نفر همزمان بخونن مشکلی نیست. ولی باید مطمئن باشی کسی همزمان نمیتونه توی فایل بنویسه.
یعنی در هر زمان فقط یک نفر میتونه فایل رو بنویسه و در اون زمان کس دیگری نه میتونه بنویسه و نه بخونه.
برای قفل کردن جهت نوشتن در فایل هم میشه از تابع flock با فلگ LOCK_EX (یعنی قفل انحصاری) استفاده کرد.
البته این قفل باعث نمیشه تا دیگران نتونن به فایل دسترسی همزمان داشته باشن، مگر اینکه همه از همین تابع قبل از خواندن و نوشتن فایل استفاده کنن. یعنی در این اثنا اگر کسی این تابع رو اعمال نکنه میتونه بنویسه یا بخونه. یعنی این قفل حالت اجباری و تضمین شده نداره و باید مطمئن باشید همه جای برنامه هایی که به اون فایل دسترسی دارن قبل از خواندن و نوشتن از این تابع استفاده کرده باشید.
ضمنا موقع خواندن باید از فلگ LOCK_SH استفاده کنی. چون این فلگ به معنای قفل اشتراکی هست و باعث میشه اگر کس دیگری هم بخواد همزمان فایل رو بخونه بتونه، ولی اگر کسی بخواد بنویسه باید قفل انحصاری بگیره که تا وقتی تمام قفل های اشتراکی (خواننده ها) آزاد نشدن نمیتونه قفل انحصاری بدست بیاره و باید منتظر بمونه.

eshpilen
چهارشنبه 02 شهریور 1390, 19:23 عصر
خب فرض کنید که فقط یه کاربر حق ویرایش فایل داره.

در این صورت این امکان وجود داره که یه کاربر فایل رو ویرایش کنه و همزمان چندین کاربر دیگه هنگام ویرایش شدن فایل، محتویات قبلی فایل رو ببینن؟
محتویات قبلی که هیچ، ممکنه نیمی از محتویات قبلی و نیمی از محتویات جدید رو بخونه! یعنی دیتای خوانده شده کاملا معیوب خواهد بود.

idocsidocs
چهارشنبه 02 شهریور 1390, 20:02 عصر
با توجه به توضیحات دوستان نمی شه روی این حالت زیاد حساب باز کرد.

باید به فکر یه روش دیگه باشم.

eshpilen
چهارشنبه 02 شهریور 1390, 21:27 عصر
با توجه به توضیحات دوستان نمی شه روی این حالت زیاد حساب باز کرد.
کدوم حالت؟

idocsidocs
چهارشنبه 02 شهریور 1390, 23:52 عصر
کدوم حالت؟
استفاده از سیستم فایل منظورم هست.

هر بار که خواستم به این بحث بپردازم با یه مسئله غیرقابل حل مواجه می شم !

binyaft
چهارشنبه 02 شهریور 1390, 23:56 عصر
استفاده از سیستم فایل منظورم هست.

هر بار که خواستم به این بحث بپردازم با یه مسئله غیرقابل حل مواجه می شم !

بستگی داره میخوای چیکار کنی ! شاید اینو هم حل کنی اصلا این روش بدردت نخوره ...
یعنی شاید استفاده از فایل کافی نباشه وگرنه میشه این مشکلو با قفل زدن فایل هنگام ویرایش حل کرد ...

idocsidocs
پنج شنبه 03 شهریور 1390, 14:07 عصر
بستگی داره میخوای چیکار کنی ! شاید اینو هم حل کنی اصلا این روش بدردت نخوره ...
یعنی شاید استفاده از فایل کافی نباشه وگرنه میشه این مشکلو با قفل زدن فایل هنگام ویرایش حل کرد ...
برای کار من این روش خوب نیست.

من می خوام منوهای سایتم داینامیک باشه. همچنین می خوایم منوها رو توی فایل قرار بدم و موقع نمایش سایت توی صفحه اینکلود کنم.

برای اینکار نباید توی دسترسی همزمان مشکلی پیش بیاد.

شما چه راهی رو پیشنهاد می کنید؟

binyaft
جمعه 04 شهریور 1390, 00:07 صبح
استفاده از Database
البته ترجمه یک فایل INI هم میشه که جای خود کار داره و ...
میتونی از Json هم استفاده کنی تو فایل