English
بازگشت به بلاگ

تشخیص ۳۲ بیت یا ۶۴ بیت بودن سیستم عامل با PHP

۲۵ فروردین ۱۳۹۳، دسته: آموزش.

برچسب ها: , , , , , , , , , .

آموزش ترفندهای PHPبرای پروژه ای که نیاز به یک سری نمودار های آماری داشت، کدی با PHP نوشته بودم که خروجی داده ها را به همراه timestamp مربوط به هرکدام بر حسب درخواست ajax در اختیار اسکریپتی می گذاشت که نمودار را رسم می کرد. روی کامپیوتر خودم درست کار می کرد اما وقتی روی سرور تست می کردم، تاریخ ها کاملا به هم می ریخت. اول فکر کردم شاید اسکریپتی که برای ایجاد داده های تصادفی به منظور تست استفاده کرده بودم، مشکل داشت. پس عین دیتابیس روی کامپیوتر را به سرور منتقل کردم و دیدم که اینطور نیست. نمونه خروجی JSON را نگاه کردم و متوجه شدم که بله! طول عدد timestamp موجود در خروجی سرور کوتاه تر و متفاوت از نمونه ی موجود بر روی کامپیوتر خودم بود. فهمیدم که سرور ۳۲ بیتی هست.

در حالت عادی، timestamp در PHP با همان ۳۲ بیت بطور صحیحی تولید می شود، اما چون داده ها توسط Javascript پردازش می شدند و از میلی ثانیه به جای ثانیه استفاده می شد، timestamp را ضرب در ۱۰۰۰ کرده بودم که هم خوانی داشته باشد. اما در نهایت به جای این کار، timestamp را به مانند string استفاده کردم و تنها در انتهای آن ۰۰۰ اضافه کردم (می توانستم به جای این کار، در سمت Javascript خروجی را در ۱۰۰۰ ضرب کنم که خب به دلیل بالا بودن حجم اطلاعات، ترجیح دادم پردازش های اضافی را به حداقل برسانم).

و اما اصل مطلب، از آنجایی که همیشه نمی توان از چنین ترفندهایی استفاده کرد و در سیستم عامل های مختلف باید راهکارهای متفاوتی را  بکار گرفت، بهتر است که در اولین مرحله ۳۲ بیتی یا ۶۴ بیتی بودن سیستم عامل را تشخیص دهیم و سپس راهکار متفاوتی را برای هر کدام در نظر بگیریم. برای این کار روش های گوناگونی وجود دارد اما ساده ترین آنها کنترل کردن ثابت PHP_INT_SIZE می باشد که در سیستم عامل های ۶۴ بیتی ۸ را بر می گرداند و در ۳۲ بیتی ۴.

 

 

۲ نظر/دیدگاه

smaam ۲۲ تیر ۱۳۹۴ - ۴:۲۳ ب.ظ

سلام
داداش من که ویندوز و سی پی یو ۶۴ بیتی دارم ولی عدد ۴ رو بر می گردونه …
هم ویندوز و هم سی پی یو رو از راه های مختلف بررسی کردم ( مثل cmd ) همه میگن ۶۴ بیتی
مشکل از کجاست؟؟؟
با تشکر فراوان

پاسخ دادن

Nima ۲۳ تیر ۱۳۹۴ - ۱:۵۴ ق.ظ

سلام، با یه سرچ مختصر و مفید متوجه شدم که این مشکلی که شما دارید بخاطر محدودیتی هست که در ویندوز وجود داره. برای اطلاعات بیشتر به این لینک مراجعه بفرمایید: http://stackoverflow.com/questions/27865340/php-int-size-returns-4-but-my-operating-system-is-64-bit

پاسخ دادن

نوشتن نظر/دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *