क्या PHP में json एक्सटेंशन अक्षम किया जा सकता है? doc कहता है कि:

PHP 5.2.0 के अनुसार, JSON एक्सटेंशन को डिफ़ॉल्ट रूप से PHP में बंडल और संकलित किया जाता है।

लेकिन टिप्पणियों में कुछ लोगों का कहना है कि json एक्सटेंशन को कभी-कभी एक अलग पैकेज के रूप में प्रदान किया जाता है।

क्या json एक्सटेंशन को स्पष्ट रूप से अक्षम किया जा सकता है, या क्या हम आश्वस्त हो सकते हैं कि यह हमेशा उपलब्ध है?


पृष्ठभूमि: मैं अपने कार्यान्वयन JsonSerializable के पुस्तकालय में एक कक्षा बनाना चाहता हूं, लेकिन यह एक बीसी ब्रेक हो सकता है यदि इंटरफ़ेस हमेशा घोषित नहीं किया जाता है, और पुस्तकालय अचानक एक एक्सटेंशन पर निर्भर करता है जो हमेशा उपलब्ध नहीं होता है .

3
Benjamin 15 अप्रैल 2020, 16:45

2 जवाब

सबसे बढ़िया उत्तर

पीएचपी 8:

नहीं, JSON एक्सटेंशन अब अक्षम नहीं किया जा सकता

पीएचपी 7:

हां, किसी भी PHP एक्सटेंशन को अपनी इच्छानुसार इंस्टॉल, अनइंस्टॉल, सक्षम या अक्षम किया जा सकता है।

json एक्सटेंशन - इसकी सर्वव्यापकता के बावजूद - अभी भी केवल एक एक्सटेंशन है और इसे इस तरह से भी हटाया जा सकता है।

ऐसे कुछ मामले हैं जिनमें json एक्सटेंशन मौजूद नहीं हो सकता है:

  1. व्यवस्थापक ने इसे अक्षम/अनइंस्टॉल कर दिया:

     ;extension=json
    
  2. PHP का जो संस्करण स्थापित किया गया था, उसे मैन्युअल रूप से स्रोत से संकलित किया गया था, और json एक्सटेंशन को छोड़ दिया गया था:

     --disable-json
    
  3. एक्सटेंशन को एक अलग पैकेज के रूप में बंडल किया गया है; उदाहरण के लिए, फेडोरा पर आपको php-json पैकेज को स्पष्ट रूप से स्थापित करना होगा।

आपके प्रश्न का महत्वपूर्ण हिस्सा: क्या हम आश्वस्त हो सकते हैं कि यह हमेशा उपलब्ध है

सामान्य तौर पर, मैं नहीं कहूंगा। हालाँकि ऐसा होने की संभावना नहीं है कि यह विशेष एक्सटेंशन अक्षम या छोड़ दिया गया है, फिर भी इसका मतलब यह नहीं है कि ऐसा नहीं होगा।

यदि आपकी लक्षित ऑडियंस उन लोगों तक सीमित है जो शायद उस प्रकार की सेटिंग को नहीं छूते हैं, तो आप सुरक्षित हो सकता है, लेकिन इसकी कोई गारंटी नहीं है।

मेरा सुझाव: अपनी लाइब्रेरी को एक संगीतकार पैकेज के रूप में बनाएं और ext-json को एक निर्भरता के रूप में घोषित करें। इस तरह, आप एक संगीतकार पैकेज के रूप में स्थापना निर्देश प्रदान कर सकते हैं और यदि अंतर्निहित सिस्टम आपकी पैकेज आवश्यकताओं को पूरा नहीं करता है, तो स्थापना विफल हो जाएगी और उपयोगकर्ता को लापता एक्सटेंशन के लिए सतर्क कर दिया जाएगा।

3
BenMorel 28 अगस्त 2020, 09:35

मैं इसे composer.json में निर्भरता के रूप में घोषित करने का सुझाव दूंगा, जो शायद सबसे आम तरीका है, जब कोई पुस्तकालय एक विशेष विस्तार की मांग करता है, जो कोर PHP का हिस्सा नहीं है (बस देखा गया है कि दूसरा उत्तर वही सुझाता है - शायद, क्योंकि यह काफी आम है)।

इसे अक्षम करने के लिए स्रोत से भवन बनाना आवश्यक नहीं है; जब डी-रेफरेंसिंग ;extension=json.so

0
Martin Zeitler 15 अप्रैल 2020, 16:33