• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
واقاً PHP 5.2 به بعد ThreadSafe نیست؟
#1
امروز اتفاقی به یه مقاله قدیمی برخورد کردم که ThreadSafe نبودن تمام نسخه های PHP 5.2 به بعد رو شرح داده بود...
https://neosmart.net/blog/2008/dont-beli...-safe-yet/

خود من در طی این سالها چیزای عجیبی از PHP دیدم و هیچوقت دلیل درستی براشون پیدا نکردم...
اینکه فلان اکستنشن بکلی دیگه حذف شد، فلان اکستنشن دیگه ThreadSafe نیست، فلان تابع دیگه ThreadSafe نیست، فلان اکستنشن منسوخ شد! و مهمتر از همه دریافت خطای
.PHP has encountered an access violation at 0x000000
که مطمعن هستم 90% PHP نویسای ویندوزی/ماژولی بارها با این خطا مواجه شدن.

یکی از مهمترین دلایل این خطا در PHP اینه: متغیر/متد تعریف شده در قسمتی از حافظه، فقط قابلیت modify/read شدن توسط یک Thread(که main/default هست) رو داره. در صورتی که از چند Thread درخواست modify/read کردن بصورت همزمانی/asynchronously می شه ازش، اونم در همون آدرس از حافظه!

مسئله دوم، حالا بعد از این همه سال وقتی نگاهی به bug report رسمی php میندازم میبینم که bug های بسیار زیادی از این دسته خطاها گزاش شده و مطالب/سوالات زیادی در مورد اکستنشن های منسوخ شده، حذف شده یا Non-ThreadSafe شده نوشته شده (که هنوز هم در پکیج threadsafe قرار دارن) و صراحتاً پاسخ داده نشده. (پیچونده شده)

مسئله سوم، تا اونجایی که من می دونم در موتور PHP، شما نمی تونید اکستنشن یا تابع Non-ThreadSafe ای رو طراحی کنید که از هدر های core ای بهره برده باشه که ThreadSafe باشه! (که اجباری هم هست)

حالا چطوره که PHP اعلام کرد: set_locale دیگه ThreadSafe نیست، IMAP دیگه ThreadSafe نیست، mSQL دیگه ThreadSafe نیست و...
درحالی که همه اینا باهم در صلح و صفا همراه پکیج PHP ThreadSafe کامپایل میشن! و در PHP ThreadSafe هم لود میشن! Idea
lol.
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : molana admin M.J
#2
PHP از قدیم الایام چیزهای غیرمعمول و شک برانگیز واضحی داشته. نمیدونم دلیل اینا چیه. شاید به دلیل ضعف سواد و تخصص و تجربهء کافی در امر طراحی زبان و مسائل دیگر در تیم PHP باشه. بهرحال نباید از نظر دور داشت که PHP یه پروژهء شخصی نمیدونم دانشجویی اینا بود که به سرعت به این حدود رسید! یعنی احتمالا توسط افرادی مبتدی و بدون تخصص و دانش و اعتبار رسمی در زمینهء امر طراحی زبان های برنامه نویسی طراحی و پیاده سازی شده و با توجه به این نشانه ها شاید هنوزم اینطور باشه یا این افراد بهرحال درش سهم و دخالت زیادی دارن.

یه پدیده هایی در PHP بوده که در هیچ زبان دیگری شخصا این سطح از طراحی عجیب و ناشیانه رو مشاهده نکردم تاحالا.
از موارد قدیمیش مثلا همون قضیه پر سر و صدا و معروف رجیستر گلوبالز بود که آخرش هم خودشون حذفش کردن (بعد از سالها استفاده و عادت و اتکای برنامه نویسان و برنامه های زیادی بهش).
از موارد جدید هم که همین رفتار غیرمنتظره و دردسرساز و خطرناک عملگرهای مقایسه ای و اینهاست که بارها بهش اشاره و درموردشون بحث کردم و توی اینترنت هم بحث و مشکل و گزارش باگ بخاطرش زیاده (گرچه این موارد باگ نیستن و طراحی ناشیانه و غلط هستن).

این موارد بقدری زیاد بودن تاحالا و تکرار شدن که من شخصا شک بردم به مسائل دیگری در این زمینه! مثلا فکر کردم تیم طراحی PHP اسرائیلی هستن و اینا شاید اینا با موساد و سیا دستشون توی یه کاسه هست و عمدا این عوامل ایجاد حفره های امنیتی رو توی PHP میذارن!!

اما باوجود اینا خب بهرحال واقعیتی که دیده میشه اینه که ظاهرا PHP در کل ابزار خیلی خوب و مفیدی است. هرچند با این بحث ها آدم دیگه کم کم شک میکنه! چون پشت پرده رو ما کامل خبر نداریم و از تمام ضعفها و حفره ها و باگهای ایجاد شده هم نمیشه به این راحتی مطلع شد. مثل همین مورد که شما مطرح کردید و بنده به شخصه خبر نداشتم. حالا تازه باید دید تبعات پنهانش در برنامه نویسی چیه و چقدر از برنامه ها بخاطر این موارد دچار باگهای کارکردی و حفره های امنیتی پنهان هستن، که اینا بحث و تحقیق و تحلیل و بررسی جداگانه ای میطلبه.

من خودم چند وقت پیش یک باگ عجیب در PHP روی ویندوز دیدم که دیگه حس و حالش نبود اصلا به کسی بگم گزارشی چیزی بکنم! باگ جالبی بود چون مثلا دوتا دستور رو که پشت سر هم مینوشتم PHP کرش میکرد ولی وقتی بینشون یک خط فاصله میذاشتم اینطور نمیشد!!

شاید فکر کنید اینکه میگم تیم طراحی PHP اسرائیلی هستن (میدونید که شرکت zend اسرائیلی است) و قضیهء تئوری توطئه و دست داشتن با موساد و سیا و NSA و این حرفها خیلی تخیلی و غیرجدی است؛ باید بگم منم تا همین اواخر همینطور فکر میکردم، ولی به مرور شک بیشتری بردم و از طرفی اخیرا یکسری منابع و مطالب و اسناد انکار ناپذیر دیدم در باب اینطور مسائل که متوجه شدم امروزه روز این مسائل مسائلی کاملا واقعی و ممکن هستند و نمونه هاش به شکلهای دیگری صورت گرفته! بطور مثال NSA الگوریتم مربوط به رمزنگاری خاصی رو توسط سازمانهای استاندارد آمریکا استاندارد کرده که شواهد و اسناد محکمی وجود دارن و نظر متخصصان بر این است که در این الگوریتم Backdoor عمدی توسط NSA جاسازی شده و NSA عمدا یک الگوریتم ضعیف رو بعنوان استاندارد ارائه و پشتیبانی کرده! درحالیکه در زمان های قدیم تر همچین پدیده هایی وجود نداشتن! ظاهرا دنیای امروز متحول شده!!
یا همینطور در ویکیپدیا درمورد یک Backdoor خوندم که عمدا در کرنل لینوکس گذاشته بودن و در ظاهر بصورت یک خطای انسانی و باگ عادی بوده که البته کشفش هم راحت نبوده، ولی درواقع عمدی بوده.
البته خوشبختانه چیزی که دیده میشه اینه که متخصصان و افراد زبدهء زیادی وجود دارن و خیلی از این موارد در کوتاه مدت کشف میشن. ولی از کجا معلوم چه بسا موارد متعددی هم باشن که اینطور نباشن!! مثل همون حفرهء امنیتی بزرگ خون ریزی قلبی در کتابخانهء بسیار پرکاربرد Open SSL که بعد از سالها تازه کشف شد (البته نمیگم که این مورد حتما عمدی بوده؛ میخوام بگم باوجود بازمتن بودن ممکنه خیلی از باگها و حفره های امنیتی تا سالها هم کشف نشن).
  پاسخ
تشکر شده توسط : sara147 Maysam.m


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان