2013-06-12 5 views
9

से पास नहीं किया गया है। मैं .htaccess से PHP तक एक पर्यावरण चर पारित करने का प्रयास कर रहा हूं। यह मेरे स्थानीय WAMP सर्वर पर ठीक काम करता है, लेकिन सर्वर पर जहां मेरी वेबसाइट होस्ट की जाती है, यह कारण के बिना विफल हो जाती है।पर्यावरण चर को .htaccess से PHP

यहाँ अपने परीक्षण विन्यास है:

.htaccess:

SetEnv TEST_VARIABLE test_value 

test.php:

<pre> 
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?> 

getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?> 
</pre> 

अपने स्थानीय सर्वर पर, सही ढंग से test.php हो रही रिटर्न:

getenv('TEST_VARIABLE') = test_value 
getenv('REDIRECT_TEST_VARIABLE') = 

लेकिन पर उत्पादन सर्वर, यह रिटर्न:

getenv('TEST_VARIABLE') = 
getenv('REDIRECT_TEST_VARIABLE') = 

थिंग्स आई की संभावना से इनकार किया है:

  1. mod_env स्थापित नहीं है/मेजबान रूप से सक्षम। ऐसा नहीं हो सकता है, क्योंकि SetEnv पहचाना नहीं जाएगा और .htaccess को संसाधित करते समय मुझे 500 मिलेंगे।

  2. AllowOverrideshttpd.conf में इस निर्देशिका के लिए FileInfo शामिल नहीं है। नहीं हो सकता है, क्योंकि SetEnv निर्देश का सामना करते समय अपाचे "SetEnv को यहां अनुमति नहीं दी गई" त्रुटि को फेंक देगा और मुझे 500 बार फिर मिल जाएगा।

  3. variables_order php.ini में 'ई' शामिल नहीं है। यह $_ENV सुपरग्लोबल खाली (जो यह है) समझाएगा, लेकिन क्यों नहीं getenv() इन चर के लिए मान वापस नहीं करता है।

  4. संपूर्ण पर्यावरण खराब हो गया है। नहीं हो सकता है, क्योंकि getenv('PATH') और getenv('SERVER_NAME') अभी भी वैध मान लौटाते हैं।

इस बिंदु पर मुझे इस बात का नुकसान हुआ है कि यह कॉन्फ़िगरेशन किस कारण हो सकता है।

उत्तर

6

मुझे नहीं लगता कि setenv का उपयोग सामान्य रूप से .htaccess में काम करता है। यह एक शेल स्क्रिप्ट कमांड है (बैश, सी खोल, आदि)। https://kb.mediatemple.net/questions/36/Using+Environment+Variables+in+PHP#gs के अनुसार, आपका सर्वर समर्थन setenv करता है, तो आपको HTTP_ के साथ वैरिएबल नाम प्रारंभ करने की आवश्यकता है।

+3

SetEnv _is_ an .htaccess कमांड, लेकिन आपने इसे दबाया: एक बार जब मैंने HTTP_ के साथ चर को प्रीफ़िक्स किया, तो सबकुछ काम करता था। मैंने किसी भी "आधिकारिक" स्रोत में दस्तावेज की आवश्यकता को नहीं देखा है, जो अजीब है, लेकिन हे, अगर यह काम करता है तो इसे छूना नहीं है, है ना? – nitwit

+1

कुछ सर्वरों पर रीव्राइटरूले के लिए एक ही आवश्यकता है। * - (ई = HTTP_VAR: VAL)। – Chris

+0

बस एक ही समस्या में भाग गया, इतना अजीब है कि यह कहीं भी दस्तावेज नहीं है। मेरे मामले में, यह एक PHP स्क्रिप्ट के साथ नहीं हुआ, बल्कि पर्ल में। – insaner

4

यदि आप मैक पर अपना होम सर्वर चला रहे हैं या suEXEC सक्षम हैं, तो परिभाषित किए गए किसी भी गैर-http पर्यावरण चर को पट्टी करने के लिए सुरक्षा उपाय हैं, इसलिए वे $ _ENV ['APPLICATION_ENV' में दिखाई नहीं देंगे ]। हालांकि, आप एक ही चीज़ प्राप्त करने के लिए मूल PHP फ़ंक्शन के माध्यम से इन तक पहुंच सकते हैं।

$var = apache_getenv('APPLICATION_ENV'); 

कि समारोह किसी भी वातावरण चर अपनी .htacces फ़ाइल में setenv के साथ परिभाषित, या किसी भी वातावरण चर कि php.ini में स्थापित किया जाएगा मिल जाएगा, भले ही पीएचपी $ _ENV चर से इन निकाल देता है।

यदि आप चाहते हैं तो आप PHP के भीतर पर्यावरण परिवर्तक को परिभाषित कर सकते हैं, हालांकि अनुशंसित नहीं है।

$_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV'); 

या बेहतर समाधान: बस एक वैश्विक परिभाषित:

define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV')); 

एक बार जब आप ऐसा करते हैं, यह के रूप में वांछित काम करना चाहिए।

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