रिश्तेदार योग्यता / कमजोरियों के साथ मैं जो विकल्प देख रहा हूं वे हैं:
फ़ाइल आधारित तंत्र
इनकी आवश्यकता है कि आपका कोड ini फ़ाइल को खोजने के लिए विशिष्ट स्थानों में दिखता है। यह हल करने के लिए एक कठिन समस्या है और एक जो हमेशा बड़े PHP अनुप्रयोगों में फसल करता है। हालाँकि, आपको PHP कोड खोजने के लिए समस्या को हल करने की आवश्यकता होगी जो रनटाइम में शामिल / फिर से उपयोग किया जाता है।
इसके लिए सामान्य दृष्टिकोण हमेशा सापेक्ष निर्देशिकाओं का उपयोग करना है, या वर्तमान निर्देशिका से ऊपर की ओर खोज करने के लिए आवेदन की आधार निर्देशिका में विशेष रूप से नामित फ़ाइल ढूंढना है।
कॉन्फिग फाइल के लिए इस्तेमाल होने वाले कॉमन फाइल फॉर्मेट में PHP कोड, इनआई फॉरमैटेड फाइल्स, JSON, XML, YAML और सीरीयल PHP हैं
PHP कोड
यह विभिन्न डेटा संरचनाओं का प्रतिनिधित्व करने के लिए लचीलेपन की एक बड़ी मात्रा प्रदान करता है, और (यह मानते हुए कि इसमें शामिल है या आवश्यकता के माध्यम से संसाधित किया जाता है) पार्स कोड ओपोड कैश से उपलब्ध होगा - एक प्रदर्शन लाभ दे रहा है।
Include_path अतिरिक्त कोड पर निर्भर रहे बिना फ़ाइल के संभावित स्थानों सार संक्षेप के लिए एक साधन प्रदान करता है।
दूसरी ओर, कॉन्फ़िगरेशन को कोड से अलग करने का एक मुख्य कारण अलग-अलग जिम्मेदारियां हैं। यह रनटाइम में अतिरिक्त कोड को इंजेक्ट करने के लिए एक मार्ग प्रदान करता है।
यदि कॉन्फ़िगरेशन एक उपकरण से बनाया गया है, तो उपकरण में डेटा को मान्य करना संभव हो सकता है, लेकिन HTML, URL, MySQL स्टेटमेंट, शेल कमांड के लिए मौजूद PHP कोड में एम्बेड करने के लिए डेटा से बचने के लिए कोई मानक कार्य नहीं है ... ।
सीरियलाइज्ड डेटा
यह अपेक्षाकृत कम मात्रा में कॉन्फ़िगरेशन (लगभग 200 वस्तुओं तक) के लिए कुशल है और किसी भी PHP डेटा संरचना के उपयोग की अनुमति देता है। डेटा फ़ाइल बनाने / पार्स करने के लिए बहुत कम कोड की आवश्यकता होती है (इसलिए आप यह सुनिश्चित करने के लिए अपने प्रयासों का खर्च उठा सकते हैं कि फ़ाइल केवल उपयुक्त प्राधिकरण के साथ लिखी गई है)।
फ़ाइल में लिखी गई सामग्री से बचने को स्वचालित रूप से नियंत्रित किया जाता है।
चूंकि आप वस्तुओं को अनुक्रमित कर सकते हैं, यह विन्यास फाइल (__wakeup मैजिक विधि) को पढ़कर कोड को लागू करने का एक अवसर पैदा करता है।
संरचित फ़ाइल
मार्सेल या JSON या XML द्वारा सुझाए गए INI फ़ाइल के रूप में इसे संग्रहीत करना भी फ़ाइल को एक PHP डेटा संरचना में (और XML के अपवाद के साथ, डेटा से बचने और फ़ाइल बनाने के लिए) कोड मंगलाचरण को खत्म करने के लिए एक सरल एपीआई प्रदान करता है क्रमबद्ध PHP डेटा का उपयोग कर भेद्यता।
इसमें क्रमबद्ध डेटा के समान प्रदर्शन विशेषताएँ होंगी।
डेटाबेस भंडारण
यह सबसे अच्छा माना जाता है जहां आपके पास कॉन्फ़िगरेशन की एक बड़ी मात्रा है, लेकिन वर्तमान कार्य के लिए जो आवश्यक है, उसमें चयनात्मक है - मुझे यह देखकर आश्चर्य हुआ कि लगभग 150 डेटा आइटमों में, स्थानीय MySQL उदाहरण से डेटा पुनर्प्राप्त करने की तुलना में जल्दी था एक डेटाफ़ाइल को अनसुना करें।
OTOH अपने डेटाबेस से कनेक्ट करने के लिए आपके द्वारा उपयोग किए जाने वाले क्रेडेंशियल्स को स्टोर करने के लिए एक अच्छी जगह नहीं है!
निष्पादन पर्यावरण
आप निष्पादन वातावरण में मान सेट कर सकते हैं जो PHP में चल रहा है।
यह PHP कोड के लिए किसी विशेष स्थान को देखने के लिए किसी भी आवश्यकता को हटा देता है। OTOH यह बड़ी मात्रा में डेटा के लिए अच्छी तरह से पैमाने पर नहीं है और रनटाइम पर सार्वभौमिक रूप से बदलना मुश्किल है।
क्लाइंट पर
क्लाइंट पर कॉन्फ़िगरेशन डेटा संग्रहीत करने के लिए एक जगह जिसका मैंने उल्लेख नहीं किया है। फिर से नेटवर्क ओवरहेड का मतलब है कि यह बड़ी मात्रा में कॉन्फ़िगरेशन के लिए अच्छा नहीं है। और चूंकि अंतिम उपयोगकर्ता का डेटा पर नियंत्रण होता है, इसलिए इसे किसी ऐसे प्रारूप में संग्रहीत किया जाना चाहिए जहां कोई छेड़छाड़ पता लगाने योग्य हो (यानी क्रिप्टोग्राफिक हस्ताक्षर के साथ) और इसमें कोई भी जानकारी नहीं होनी चाहिए जो इसके प्रकटीकरण से समझौता हो (यानी उलट एन्क्रिप्टेड)।
इसके विपरीत, संवेदनशील जानकारी संग्रहीत करने के लिए इसके बहुत सारे लाभ हैं जो कि अंतिम उपयोगकर्ता के पास है - यदि आप इसे सर्वर पर संग्रहीत नहीं कर रहे हैं, तो इसे वहां से चोरी नहीं किया जा सकता है।
नेटवर्क निर्देशिकाएँ
कॉन्फ़िगरेशन जानकारी संग्रहीत करने के लिए एक और दिलचस्प जगह DNS / LDAP में है। यह छोटी संख्या में सूचना के छोटे टुकड़ों के लिए काम करेगा - लेकिन आपको एसपीएफ के लिए 1 सामान्य फॉर्म पर विचार करने की आवश्यकता नहीं है ।
Infrastucture कैशिंग, प्रतिकृति और वितरण का समर्थन करता है। इसलिए यह बहुत बड़े इन्फ्रास्ट्रक्चर के लिए अच्छा काम करता है।
संस्करण नियंत्रण प्रणाली
कॉन्फ़िगरेशन, जैसे कोड को प्रबंधित किया जाना चाहिए और संस्करण नियंत्रित किया जाना चाहिए - इसलिए आपके वीसी सिस्टम से सीधे कॉन्फ़िगरेशन प्राप्त करना एक व्यवहार्य समाधान है। लेकिन अक्सर यह एक महत्वपूर्ण प्रदर्शन ओवरहेड के साथ आता है इसलिए कैशिंग उचित हो सकता है।