2011-12-18 8 views
8

के साथ $ _ENV (fka $ HTTP_ENV_VARS) सेट करना अपाचे वातावरण में setenv के बराबर क्या है? अपाचे के साथ मैं उदाहरण के लिए env "SOMEENV" सेट कर सकता हूं और इसे $ _ENV ['SOMEENV'] के माध्यम से php में एक्सेस कर सकता हूं - लेकिन मुझे नहीं पता कि nginx + php-fpm के साथ इसे कैसे किया जाए।nginx/php-fpm

मैंने शुरू में सोचा था कि मुझे अपने PHP-fpm पूल की कॉन्फ़िगरेशन में ENV [SOMENEV] = test सेट करना होगा, लेकिन var_dump ($ _ ENV) अभी भी कुछ भी नहीं लौटाता है।

कोई संकेत?

उत्तर

17

nginx में php के पर्यावरण को प्रभावित करने का कोई तरीका नहीं है, क्योंकि यह php दुभाषिया को इसकी प्रक्रिया में एम्बेड नहीं करता है। यह fastcgi_param निर्देशों के माध्यम से PHP को पैरामीटर पास करता है। आप केवल एक है जहाँ आप अपने पैरामीटर के बाकी सेट जोड़ सकते हैं और $ _SERVER द्वारा ही पहुंच सकते हैं:

location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $request_filename; 
    fastcgi_param SOMEENV test; 
    fastcgi_pass php; 
} 
+1

हाय, आपके उत्तर के लिए धन्यवाद। ठीक है जो मुझे $ _SERVER ['SOMEENV'] में इंजेक्ट करने की अनुमति देता है, लेकिन मैं $ _ENV ['SOMEENV'] के लिए कुछ कैसे प्रदान कर सकता हूं? – Josh

+1

$ _SERVER सरणी प्रविष्टियां वेबसर्वर द्वारा बनाई गई हैं लेकिन $ _ENV चर को पर्यावरण से आयात किया जाता है जिसके तहत PHP दुभाषिया चल रहा है और कई शैल द्वारा प्रदान किए जाते हैं जिसके तहत PHP चल रहा है। अपाचे के मामले में, PHP दुभाषिया अपाचे प्रक्रिया में एम्बेडेड है लेकिन यह Nginx के साथ मामला नहीं है। आईओओ, एनजिनक्स के साथ $ _ENV चर सेट करना संभव है और $ _SERVER जितना अच्छा हो उतना अच्छा है। – Dayo

+0

क्या एनजीआईएनएक्स में कोई 'एनवी' निर्देश नहीं है? – CMCDragonkai

6

पता है कि $_ENV चर की उपलब्धता php.ini में variables_order की स्थापना php- द्वारा इस्तेमाल किया पर निर्भर करता है रहो एफ पी एम। डिफ़ॉल्ट EGPCS है, जहां E पर्यावरण है, हालांकि उबंटू 12.04 पर मैंने पाया कि यह GPCS था।

; This directive determines which super global arrays are registered when PHP 
; starts up. G,P,C,E & S are abbreviations for the following respective super 
; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 
; paid for the registration of these arrays and because ENV is not as commonly 
; used as the others, ENV is not recommended on productions servers. 

यह getenv() जो हमेशा उपलब्ध है उपयोग करने की सलाह: php.ini ही $_ENV के बारे में एक चेतावनी वहन करती है। मैंने पाया कि एफपीएम पूल में सेट किए गए चर को इस तरह से पुनर्प्राप्त किया जा सकता है।

+1

आप php-fpm conf फ़ाइल में घोषित चर का उपयोग कर सकते हैं क्योंकि getenv() दोनों ने $ _ENV और $ _SERVER दोनों को यहां बताया है: http://stackoverflow.com/questions/3780866/why-is-my-env-empty – LeandroCR

+0

getenv() एक ही तरह से काम नहीं करते हैं – deFreitas

0

मैंने सभी env सेट किया [...] = php-fpm.d/www.conf में चर एक सप्ताहांत की कोशिश करने के बाद, मुझे इन चरों का उपयोग करने का एकमात्र तरीका $ _SERVER का उपयोग कर रहा है, और $ _ENV तक पहुंच नहीं हो सकता इन चर क्या कोई भी कोई विचार दे सकता है?