2008-09-28 9 views
18

मैं प्रति-vhost आधार पर अपनी डेटाबेस कनेक्शन सेटिंग्स को स्वचालित रूप से बदलना चाहता हूं, ताकि मुझे किसी भी PHP कोड को संपादित करने की आवश्यकता न हो क्योंकि यह स्टेजिंग से लाइव तक चलता है और फिर भी विभिन्न डेटाबेस तक पहुंचता है। यह एक समर्पित सर्वर पर है।httpd.conf में PHP चर सेट करना?

तो मैं सोच रहा था, क्या मैं vhd परिभाषा के हिस्से के रूप में httpd.conf में एक PHP चर या स्थिर सेट कर सकता हूं जिसे साइट स्वचालित रूप से परीक्षण डेटाबेस में इंगित करने के लिए उपयोग कर सकती है?

$database = 'live'; 
if (some staging environment variable is true) { 
    $database = 'testing'; // and not live 
} 

यदि यह संभव नहीं है, मैं इस मामले मैं सुरक्षित रूप से होस्ट नाम मैं बताने के लिए पर चल रहा हूँ की जांच कर सकते में लगता है, लेकिन मैं कुछ थोड़ा कम नाजुक

आशा इस बनाता चाहते हैं भावना

बहुत धन्यवाद

इयान

+0

यह एक अच्छा विचार नहीं है। कम से कम, आईएमएचओ। अपने वीसी का प्रयोग करें, एक टैग करें और आवश्यक परिवर्तन करें और इसके साथ किया जाए। यह कुछ प्रकार के सर्वर-साइड कॉन्फ़िगरेशन के बाद बहुत क्लीनर होगा। – Till

+2

हम एक सप्ताह में बीस रिलीज करते हैं, तब तक ... आप एक अच्छा विचार क्यों सुझा रहे हैं? – Polsonby

+0

ध्यान दें कि अपाचे के बाहर चलने वाली शैल स्क्रिप्ट को भी उनके पर्यावरण को जानने की आवश्यकता होगी। –

उत्तर

10

आप .htaccess फाइल का उपयोग करने की कोशिश की थी? आप इसका उपयोग कर php.ini मानों को ओवरराइड कर सकते हैं।

php_value name value 

में अन्य जानकारी:

बस अपने htdocs निर्देशिका में .htaccess फाइल डाल

+0

htaccess के माध्यम से ऐसा करना httpd.conf की तुलना में एक बेहतर विचार की तरह लगता है। –

+14

असहमत; vhost कॉन्फ़िगरेशन सेक्शन में ऐसा करना बेहतर है, क्योंकि इसका मतलब है कि आप पूरी तरह से .htaccess को अक्षम कर सकते हैं, जो अपाचे के लिए एक प्रदर्शन लाभ है क्योंकि इसे प्रत्येक अनुरोध के लिए .htaccess फ़ाइल की जांच करने की आवश्यकता नहीं है। –

+0

यदि यह अभी भी काम नहीं कर रहा है, तो AllowOverride के लिए किसी भी आदेश के लिए अपने httpd.conf में जांचें। यह जानने का प्रयास करने में 45 मिनट बिताए कि मेरी .htaccess फ़ाइल को अभी क्यों अनदेखा किया जा रहा है। –

70

हां ... आप यह कर सकते हैं:

SetEnv DATABASE_NAME testing 
PHP में

और उसके बाद:

$database = $_SERVER["DATABASE_NAME"]; 

या

$database = getenv("DATABASE_NAME"); 
+1

जहां तक ​​मुझे पता है कि यह $ _ENV के बजाय $ _SERVER ['DATABASE_NAME'] होना चाहिए। इसे यहां PHP 5.2 डेबियन पर परीक्षण किया गया है और vars $ _ENV में नहीं डाले गए हैं लेकिन $ _SERVER – ChrisR

+0

में ऐसा लगता है कि आप सही हैं। $ _ENV कमांड लाइन पर काम करता है, लेकिन अपाचे के तहत चलते समय यह पॉप्युलेट नहीं लगता है। –

+6

यह ओपी पूछने के उत्तर की तरह लगता है। स्वीकृत उत्तर ओवरराइडिंग सेटिंग्स के लिए है। – RickMeasham

14

आप एक ऐसे वातावरण चर सेट और PHP के साथ इसे पुनः प्राप्त कर सकते हैं।

httpd.conf में:

SetEnv database testing 

अपने PHP में:

if (getenv('database') == 'testing') { 

या

if ($_SERVER['database'] == 'testing') { 
3

मैं एक वातावरण चर सेट नहीं होगा, क्योंकि यह डिफ़ॉल्ट स्क्रिप्ट आउटपुट ली में भी दिखाई देता है के PhpInfo();

बस सिर्फ htdocs फ़ोल्डर के ऊपर अपनी .htaccess में एक php_value का उपयोग करें और आप कर और सुरक्षित :)

2

.htaccess के साथ समस्या यह है कि यह कोड बेस पेड़ का एक हिस्सा है कर रहे हैं। और कोड बेस पेड़ वीसी/एसवीएन का हिस्सा है। इसलिए स्थानीय/देव में कोई भी परिवर्तन उत्पादन में स्थानांतरित हो जाता है। Httpd.conf में env चर सेटिंग को रखते हुए आपको सर्वर बनाम देव ध्वज को गलती से ओवरराइट करने के बारे में सावधान रहने का प्रयास बचाता है। बेशक आप आईपी एड्रेस या होस्ट नाम से नहीं करना चाहते हैं, जिनमें से दोनों स्केलेबल दृष्टिकोण नहीं हैं।

+1

उल्लेख नहीं है कि आप वर्चुअलहोस्ट को परिभाषित करते समय इसे भी सेट कर सकते हैं। – Arda

0

मैं इस प्रकार के समाधान को भी देख रहा था। मुझे यह मिला कि, अपाचे के तहत आप http.conf में SetEnv KeyName DataValue का उपयोग कर सकते हैं और आईआईएस में आप फास्ट सीजीआई सेटिंग्स >> संपादित करें ... >> पर्यावरण वैरिएबल >> ... और KeyName, DataValue जोड़ सकते हैं।

बदले में यह DataValue पर सेट होने के लिए PHP $var = $_SERVER["KeyName"]; को अनुमति देता है और आईआईएस और अपाचे दोनों के तहत आवश्यक रूप से उपयोग किया जाता है।

मुझे पता है कि यह एक अजीब उपयोग केस है। मैं काम पर WAMP का उपयोग करता हूं और घर पर एमएएमपी का उपयोग करता हूं, इसलिए यह वैसे ही काम करने में सक्षम होना अच्छा होता है।

संबंधित मुद्दे