32-बिट PHP की सीमाएँ
यदि आप Drupal को ऐसी प्रणाली पर चलाते हैं जहाँ PHP को 32-बिट पूर्णांकों के उपयोग तक सीमित या संकलित किया गया है, तो आप केवल 1901 और 2038 के बीच की तिथियाँ ही दर्ज कर पाएंगे (विशेष रूप से, 13 दिसंबर 1901 को 20:45:52 UTC से 19 जनवरी 2038 को 03:14:07 UTC तक)। इसे आम तौर पर वर्ष 2038 समस्या के रूप में जाना जाता है।
एक सामान्य लक्षण यह है कि तिथि निर्दिष्ट सीमा के बाहर होने पर 1970-01-01 के रूप में प्रदर्शित या सहेजी जाती है, न कि अपेक्षित मान के रूप में। यह सभी PHP अनुप्रयोगों को प्रभावित करेगा। विशेष रूप से, Drupal में यह तिथि-आधारित फ़ील्ड प्रकारों को प्रभावित करता है, जैसे केवल तिथि और तिथि-और-समय, जिसमें "लिस्ट सिलेक्ट" विजेट भी शामिल है। आप 1900 से 2038 के बाहर के वर्ष चुन सकते हैं, लेकिन क्योंकि PHP स्वयं उन्हें संसाधित नहीं कर सकता, वे बिना किसी चेतावनी के 1970-01-01 के रूप में सहेजे/प्रदर्शित किए जाएंगे।
प्रभावित उत्पाद
- Windows के लिए आधिकारिक PHP 5.x / 7.x x86 बिल्ड और PHP 5.x x64।
- कोई भी वेब-स्टैक पैकेज (जैसे XAMPP, Wamp आदि) जिसमें PHP 32-बिट संस्करण के लिए संकलित है और/या 32-बिट सिस्टम पर चल रहा है।
- Acquia Dev Desktop 2 14 जून 2018 की रिलीज़ से पहले (अब यह 64-बिट PHP और MySQL का उपयोग करता है)।
नोट: यह इस बात पर निर्भर करता है कि स्वयं PHP कैसे संकलित किया गया है: यदि आपके पास 64-बिट ऑपरेटिंग सिस्टम पर चलने वाला 32-बिट PHP संस्करण है, तो भी आपको यह समस्या होगी।
परीक्षण
यह जांचने के लिए कि आपका PHP प्रभावित है या नहीं, आप यह कमांड चला सकते हैं (एक ही पंक्ति में):
php -r "echo (date('y',strtotime('2039-01-01')) == 39 ? 'OK' : 'Y2K38 limitation') . PHP_EOL;"
अप्रभावित PHP इंस्टेंस OK प्रिंट करेगा, जबकि कमजोर PHP इंस्टेंस Y2K38 limitation संदेश प्रिंट करेगा।